使用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!?]