cin、scanf输入字符

cin对象的>>运算符返回的是NULL 当然可以不满足while的条件跳出,

scanf接收到EOF返回EOF,EOF是-1,于是呆在循环里不退出来了。

所以写while(cin>>a) 与 while( ~scanf("%d",&a) )才是文件读入结束,即scanf的!=EOF(-1)

(1)scanf

     1.1  scanf 输入字符时,会将'\n'、空格吸收,即可将它俩赋值给变量。

     1.2  scanf 输入字符串时,遇到空格或者回车就代表结束

            输入一个字符串,如果在这之前有空格或回车,空格和回车不会给字符串。遇到下一个空格或回车才代表结束

             而gets()会将回车给字符串

     1.3  读一行字符,可以用gets();

 

(2)cin

    cin用法很简单,如果输入的是一个字符,那么,'\n'、空格不会被吸收, 其他的情况和scanf差不多

 

这个循环不会结束:

char c[7],d;
    int i=0;
    while(cin>>d)
    {
       c[i++]=d;
    }

所以要在里加if(d=='\n')break;

(3)如果用gets()或者getline(),那么它一遇到'\n'就结束,比如定义 char c; char s[10]; scanf("%c", &c);gets(s);printf("%c\n", c);printf("%s",s);

gets()接受到回车后将回车符转为NULL,在末尾添加‘\0’,作为结束 (回车符不在缓冲区)

     如果一输入一个字符想给c,然后回车在下一行输入一行字符串给s;那么输出的时候会发现,第一行是字符c,第二行是个空行, 光标在第三行;

分析:输入的第一个字符给了c,然后回车'\n',这个回车代表了s是个空串(很神奇),同时,如果在输入一个字符c之后,按两个空格再加一个字符a再回车,那么s包含的就是两个空格字符加字符a,在结束

    还发现,如果定义 char c[10]; char s[10]; scanf("%s", c);gets(s);printf("%s\n", c);printf("%s",s);

输入asd  SS

结果输出的是

asd

__SS(前面有有两个空格)

表明输入asd加个空格表示c字符串结束时,这个空格同时给了字符串s。。。

 

(4)如果定义的是字符数组 char c[10],那么读入一行只能用gets(),不能用getline();可以用cout输出字符数组,也可以用printf()输出;

如果定义string s;

输入不能用gets(),只能用getline();

输出不能用printf(),只能用cout;

猜你喜欢

转载自blog.csdn.net/wangqianqianya/article/details/80203581