2

当代码中遇到多个scanf()语句时,除了第一个语句外,其他所有语句都被跳过,即在代码运行时scanf()不会提示输入这些语句。scanf()

我尝试了一些建议。例如,flushall()在某些站点上建议使用 of,但这会导致编译错误。

非常感谢任何帮助。

[代码作为答案添加。]

4

6 回答 6

3

检查scanf()的返回值!

从手册页中:“scanf 返回分配的输入项的数量,如果匹配失败,它可以少于提供的数量,甚至为零。零表示,虽然有可用的输入,但没有分配转换;这通常是由于输入字符无效,例如用于 '%d' 转换的字母字符。如果在任何转换(例如文件结束)之前发生输入失败,则返回值 EOF。如果出现错误或文件结束在转换开始后发生,返回成功完成的转换次数。”

于 2008-09-17T07:18:49.083 回答
2

代码和输入的示例肯定会提高我们帮助您解决特定问题的能力,因为有很多可能导致问题的潜在情况。

示例(我能很快想到):

  • 格式字符串与输入流中的下一个字符不匹配。scanf 因此没有读取任何内容。
  • 仅当遇到 full 或 return 时才会刷新 stdin 输入缓冲区。
  • 来自 1 行输入的输入可能被多个 scanf 语句使用。随后的 scanf 语句从最后一个离开的地方开始。因此程序不会因用户输入而停止。
  • %s 在 scanf 和 printf printf 上的行为不同,
    它会打印整个字符串。
    scanf 它读取一个空格分隔的单词
于 2008-09-18T16:00:17.310 回答
0

我一直认为 scanf() 很危险,因为它会使您的输入流处于不确定状态。

我更喜欢使用其他(更安全的)命令来引入字符串(fgets 等),然后使用 sscanf 来处理它。然后您可以随时备份到字符串的开头并重新启动。

于 2008-09-17T06:52:50.003 回答
0

这听起来像是一些转换问题。可能是 %s 转换永远不会结束,或者您指定了一个永远不会输入的字符或类似的东西。我建议如下:尝试类似: int a=0; 诠释 b = 0; scanf("%d", &a); scanf("%d", &b); printf("a=%d, b=%d\n", a, b); 如果这可行,请尝试增加转换,以查看导致问题的原因。

于 2008-09-17T06:56:32.820 回答
0

总是在任何 "scanf();" 之前使用 ""fflush(stdin);"" 语句,因为除非和直到你不清除标准输入流 scanf 语句将读取 std i/p 中已经存在的值。

于 2011-09-14T19:07:06.007 回答
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!?]
于 2010-05-07T08:27:31.847 回答