无法使用scanf两次扫描字符串,然后再扫描字符
我尝试使用无法使用scanf两次扫描字符串,然后再扫描字符,c,stdin,scanf,C,Stdin,Scanf,我尝试使用scanf两次扫描字符串,然后扫描字符。它首先扫描字符串,而不执行第二个scanf。当我在一个scanf中同时使用%s和%c时,效果非常好。你能告诉我为什么会这样吗 #include<stdio.h> int main() { char s[100],ch; scanf("%s",s); scanf("%c",&ch); //this does not work printf("%s %c",s,ch); return 0; } #包括 int main()
scanf
两次扫描字符串,然后扫描字符。它首先扫描字符串,而不执行第二个scanf
。当我在一个scanf
中同时使用%s
和%c
时,效果非常好。你能告诉我为什么会这样吗
#include<stdio.h>
int main()
{
char s[100],ch;
scanf("%s",s);
scanf("%c",&ch); //this does not work
printf("%s %c",s,ch);
return 0;
}
#包括
int main()
{
chars[100],ch;
scanf(“%s”,s);
scanf(“%c”,&ch);//这不起作用
printf(“%s%c”,s,ch);
返回0;
}
另一个有效的程序
#include<stdio.h>
int main()
{
char s[100],ch;
scanf("%s %c",s,&ch); //this works!
printf("%s %c",s,ch);
return 0;
}
#包括
int main()
{
chars[100],ch;
scanf(“%s%c”、s和ch);//这很有效!
printf(“%s%c”,s,ch);
返回0;
}
请在scanf()
中的%c
之前添加空格
读取字符串后有一个换行符,因此%c
#include<stdio.h>
int main()
{
char s[100],ch;
scanf("%s",s);
scanf(" %c",&ch);
printf("%s %c",s,ch);
return 0;
}
#包括
int main()
{
chars[100],ch;
scanf(“%s”,s);
scanf(“%c”和“ch”);
printf(“%s%c”,s,ch);
返回0;
}
“不起作用”并没有向我们解释发生了什么。你以为会发生什么?到底发生了什么?你做了什么来试图理解这个问题?在程序中使用调试器时发生了什么?在第一个选项中,在第二个scanf
之后立即放置一个断点,并检查ch
的值。很可能是第一个scanf
中的换行符。不要避免学习如何调试代码,它将在将来对您有所帮助。注意:避免赤裸裸的“%s”
。在这里最好使用“%99s”
。另一种逻辑上更明显(IMO)的清除scanf中剩余换行符的方法是在输入的格式化程序后添加%*c,因此您需要scanf(“%s%*c”,s)代码>在上面的片段中;这将清除缓冲区,以便下一个scanf调用不会读取上一个scanf调用在缓冲区中留下的换行符。格式条目中的*after%告诉scanf放弃扫描值(对于任何格式)。