如何使用多个输入使scanf()忽略其他输入?

时间:2013-02-27 19:20:19

标签: c input formatting stdin scanf

scanf("%s %d %s %d",word1,&num1,word2,&num2);

所以当用户输入“退出”时,它应该停止要求其他3个输入。但它要求我输入另一个“退出”,可能是因为格式为

的2%s

到底有没有? 编辑:因为它必须在循环中获得4个输入,除非输入退出。

2 个答案:

答案 0 :(得分:3)

scanf是一个非常生硬的工具,不善于与非结构化输入(包括人类:-)交谈)。一般情况下,如果您要与某人进行互动,则应从fgets开始阅读一行,然后选择结果行,但最方便,可能包括sscanf

这比你想象的要糟糕,因为%d指令如果你把它作为整数不可扫描的东西喂它就会堵塞。例如,如果您输入quit now,则第一个%s指令会读取单词quit,但%d会在输入流中留下now,导致{ {1}}返回1(一次成功的转换和分配)。下一次读取字符串的尝试将获取并使用scanf;对于天真的代码,这似乎是后来的第二个输入行,而不是第一个的延续。

答案 1 :(得分:2)

#include <stdio.h>
#include <string.h>

scanf("%s ", word1);
if (strcmp(word1, "quit") != 0)
    scanf("%d %s %d", &num1, word2, &num2);