当代码中遇到多个scanf()
语句时,除了第一个scanf()
语句之外,其他所有语句都被跳过,也就是说,没有提示输入那些scanf()
代码运行时的语句。
我尝试了一些建议。例如,在某些站点上建议使用flushall()
,但这会产生编译错误。
非常感谢任何帮助。
[代码已添加为an answer。]
答案 0 :(得分:3)
检查scanf()的返回值!
从手册页: “scanf返回分配的输入项目数,在匹配失败的情况下可以少于提供的数量,甚至为零。零表示,虽然有可用的输入,但没有分配转换;通常这是由于一个无效的输入字符,例如'%d'转换的字母字符。如果在发生任何转换(如文件结束)之前发生输入故障,则返回值EOF。如果出现错误或文件结束在转换开始后发生,返回成功完成的转换次数。“
答案 1 :(得分:2)
代码和输入的示例肯定会提高我们帮助您解决特定问题的能力,因为有很多可能导致问题的潜在情况。
示例(我可以快速思考):
答案 2 :(得分:0)
我一直认为scanf()很危险,因为它可能会使输入流处于不确定状态。
我更喜欢使用其他(更安全)命令来引入字符串(fgets等)然后使用sscanf来处理它。然后你可以随时备份到字符串的开头并重新启动。
答案 3 :(得分:0)
这听起来像是一些转换问题。可能是%s转换永远不会结束,或者您指定一个永远不会输入的字符或类似的东西。我建议如下: 一个。尝试类似的东西: int a = 0; int b = 0; scanf(“%d”,& a); scanf(“%d”,& b); printf(“a =%d,b =%d \ n”,a,b); 如果这样做,请尝试增加转换,以查看哪一个导致问题。
答案 4 :(得分:0)
守则简单,因为:
#include <stdio.h>
int main()
{
long int z,s,n,i,j,m,x;
scanf("%ld ",&z);
for(i=0; i<z; i++)
{
scanf("%ld",&s); n=0;
for (j=0; j<s; j++) { scanf("%ld",&m); n+=m; }
x=n+s-1;
printf("%ld\n",n);
}
return 0;
}
汇编:
D:\edycja>gcc WSEGA.c -o WSEGA.exe -Wall
D:\edycja>WSEGA.exe
D:\edycja> [Where was the program!?]
答案 5 :(得分:0)
始终使用“”fflush(stdin);“”之前的任何“scanf();”声明因为除非你没有清除标准输入流,否则scanf语句将读取std i / p中已经存在的值。