Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C代码等待更多输入,而不是打印错误_C - Fatal编程技术网

C代码等待更多输入,而不是打印错误

C代码等待更多输入,而不是打印错误,c,C,我正在尝试制作一个接受用户输入的程序。如果用户未指定类型,则应包含所有3个值,如: 0 1 2 程序默认为特定的类型格式。 它必须具有所有3个值才能成为有效输入,如果输入的值少于3个,则应返回错误消息。 我遇到的问题是,如果我输入的值少于3个,程序显然只是等待其余的输入。如果用户只输入0、1或2个值并按enter键,如何让它转到错误消息? 以下是守则的相关部分: if (actuallyTypes) { scanf("%s", initialCheck); scanf("%s",

我正在尝试制作一个接受用户输入的程序。如果用户未指定类型,则应包含所有3个值,如: 0 1 2 程序默认为特定的类型格式。 它必须具有所有3个值才能成为有效输入,如果输入的值少于3个,则应返回错误消息。 我遇到的问题是,如果我输入的值少于3个,程序显然只是等待其余的输入。如果用户只输入0、1或2个值并按enter键,如何让它转到错误消息? 以下是守则的相关部分:

if (actuallyTypes) {
    scanf("%s", initialCheck);
    scanf("%s", finalCheck);
    scanf("%s", intermediateCheck);
} else {
    scanf(input, "%s", initialCheck);
    scanf("%s", finalCheck);
    scanf("%s", intermediateCheck);    
}

然后我有一个assert函数检查输入是否有效,如果无效,它会打印错误消息。

只使用一个
scanf
,而不是三个。例如:

scanf("%s %s %s", initialCheck,finalCheck,intermediateCheck)

解决了fgets()提取字符串中输入的数量和assert函数中的逻辑以确保输入的数量的问题。

什么是
%s
?这样做会进一步破坏程序,并使其在不应打印错误消息时打印错误消息,现在等待两行3值输入
%S
应为
%S
,并且应测试
scanf
的结果(计数器)是否将输入作为一行以空格分隔?使用所有警告和调试信息进行编译(
gcc-Wall-Wextra-g
with…)并使用调试器。复杂的东西和操作系统具体在哪个操作系统上?您仔细阅读了的文档了吗?同时显示其余的代码!
scanf(输入,“%s”,初始检查);
错误您需要回复@J…S的评论。如果您的输入都在一行上,只需将该行读入缓冲区,并使用
sscanf
strtok
解析令牌数。您的另一个选项是使用
选择
(或其变体之一)如果在超时期间没有准备好输入文件说明,则使用超时选项并执行一些默认操作。