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

使用gcc时跳过scanf()(和cin)语句,gcc,scanf,Gcc,Scanf,当代码中遇到多个scanf()语句时,除第一个scanf()语句外,所有其他语句都将被跳过,即在代码运行时,不会提示输入这些scanf()语句 我试过一些建议。例如,一些网站建议使用flushall(),但这会导致编译错误 非常感谢您的帮助 [代码添加为。]我一直认为scanf()是危险的,因为它会使您的输入流处于不确定状态 我更喜欢使用其他(更安全的)命令来引入字符串(fgets等),然后使用sscanf来处理它。然后,您可以始终备份到字符串的开头并重新启动。这听起来像是一些转换问题。可能是%

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

我试过一些建议。例如,一些网站建议使用
flushall()
,但这会导致编译错误

非常感谢您的帮助

[代码添加为。]

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


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

这听起来像是一些转换问题。可能是%s转换永远不会结束,或者您指定了一个永远不会输入的字符或类似的内容。我建议如下: A.尝试以下方法: int a=0; int b=0; scanf(“%d”和“&a”); scanf(“%d”和“b”); printf(“a=%d,b=%d\n”,a,b);
如果可行,请尝试增加转换,看看是哪一个导致了问题。

检查scanf()的返回值

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

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

示例(我能很快想到):

  • 格式字符串与输入流上的下一个字符不匹配。因此,scanf没有读取任何内容
  • 只有在遇到满或返回时,才会刷新标准输入缓冲区。
  • 多个scanf语句可以使用来自一行键入的输入。后续的scanf语句将在最后一个on停止的位置进行处理。因此,程序不会因用户输入而停止
  • %s在scanf和printf上的行为不同
    printf它打印整个字符串。
    扫描它读取一个空格分隔的单词

    • 代码很简单,因为它是:

      #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;
      }
      

      始终使用“fflush”(标准输入法);“”在任何“scanf();”语句之前,因为除非您清除标准输入流,否则scanf语句将读取std i/p中已经存在的值。

      添加一个失败的快速示例?可能更容易帮助用户输入代码
      D:\edycja>gcc WSEGA.c -o WSEGA.exe -Wall
      
      D:\edycja>WSEGA.exe
      
      D:\edycja> [Where was the program!?]