Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用scanf两次扫描字符串,然后再扫描字符_C_Stdin_Scanf - Fatal编程技术网

无法使用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放弃扫描值(对于任何格式)。