C语言中scanf为什么没有执行呀?
这里的第二个scanf()为什么没有执行呢?我设置了断点的时候也没有发现它执行。请问各位老师这是什么地方的问题?
------解决方案--------------------
第二个scanf指定是执行了的,只不过你的这两个scanf的写法有问题。
你第一个scanf读到 \n 返回了,然后让第二个scanf去读这个\n,不还是直接返回么
------解决方案--------------------
输入的字符串都在标准输入缓存中,为了避免回车键的干扰,可以在scanf前面加上fflush(stdin); 来清除标准输入的缓存。
#include
#include
void main()
{
char num[50];
scanf("%s",num);
printf("%s\n",num);
int len=strlen(num);
fflush(stdin);
scanf("%c",&num[len]);
printf("%s\n",num);
}
这样就可以得到你想要的答案
------解决方案--------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
------解决方案--------------------
#include
#include
#include
int main()
{
char num[50];
scanf("%[^\n]", num); //输入test1回车,此时num读到了test1
printf("%s\n", num);
int len = strlen(num);
scanf("%[^\n]", &num[len]); //这个读取到了空白字符,所以是执行了scanf,运行结果让你以为没执行而已
printf("%s\n", num);
system("pause");
return 0;
}
解决方法
1.在scanf输入个空格
2.使用fflush
#include
#include
#include
int main()
{
char num[50];
scanf(" %[^\n]", num); //注意有个空格
printf("%s\n", num);
int len = strlen(num);
scanf(" %[^\n]", &num[len]); //注意有个空格
printf("%s\n", num);
system("pause");
return 0;
}
#include
#include
#include
int main()
{
char num[50];
scanf("%[^\n]", num);
printf("%s\n", num);
fflush(stdin); //清空缓冲区
int len = strlen(num);
scanf("%[^\n]", &num[len]);
printf("%s\n", num);
system("pause");
return 0;
}