为什么我不能扫描%c字符?

时间:2014-11-21 12:12:55

标签: c scanf

在c编程时成功扫描字符串后不扫描字符。

char s[10],c;
scanf("%s",s);
scanf("%c",&c);
printf("%s\n",s);
printf("%c",c);

3 个答案:

答案 0 :(得分:4)

scanf手册:

  

说明符c:

     

匹配长度由最大值指定的字符序列   字段宽度(默认为1);下一个指针必须是指向char的指针,并且   所有角色必须有足够的空间(没有终止空值   字节被添加)。 通常跳过前导空格被抑制。至   首先跳过空格,使用格式的显式空格。

因此,请将格式更改为" %c"

答案 1 :(得分:1)

这个

char s[10],c;
scanf("%s",s);
scanf("%c",&c);
printf("%s\n",s);
printf("%c",c);

无法按预期工作,因为当您使用scanf("%s",s);时,您将从键盘输入一个字符串,然后按Enter键。 scanf("%s",s);将字符串存储在缓冲区的s中,但会让缓冲区中的enter或更精确\n。下一个scanf("%c",&c);会读取\n,因为它的长度为1个字符,并将其存储在c中。但是当你打印它时你什么也看不见,因为它只是一个新的线。为防止所有此更改,第二个scanf("%c",&c); scanf(" %c",&c);\n留出空间。

希望这可以帮助您了解正在发生的事情。

答案 2 :(得分:0)

输入字符串's'的字符后输入'\ n',下一次字符扫描会捕获新行并打印出来。你能做的就是捕获新行'\ n'。放上scanf(“%c”,& c); 再一次它会起作用。

char s[10],c;
`scanf("%s",s);`
`scanf("%c",&c);`
`scanf("%c",&c)`
`printf("%s\n",s);`
`printf("%c",c);`