使用gcc时跳过scanf()(和cin)语句

时间:2008-09-17 06:47:29

标签: gcc scanf

当代码中遇到多个scanf()语句时,除了第一个scanf()语句之外,其他所有语句都被跳过,也就是说,没有提示输入那些scanf()代码运行时的语句。

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

非常感谢任何帮助。

[代码已添加为an answer。]

6 个答案:

答案 0 :(得分:3)

检查scanf()的返回值!

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

答案 1 :(得分:2)

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

示例(我可以快速思考):

  • 格式字符串与输入流中的下一个字符不匹配。因此scanf不会读取任何内容。
  • 仅在遇到完全或返回时才刷新stdin输入缓冲区。
  • 来自1行键入的输入可以由多个scanf语句使用。随后的scanf语句将从最后一个关闭的位置开始。因此,程序不会停止用户输入。
  • %s在scanf和printf上的行为有所不同 printf它打印整个字符串。
    scanf它读取 ONE 空格分隔词

答案 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中已经存在的值。