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

因此,当用户输入“退出”时,它应该停止询问其他 3 个输入。但是它要求我输入另一个“退出”,可能是因为格式中有 2%s

有没有办法解决?编辑:因为它必须在一个循环中获得 4 个输入,除非输入了退出。

4

2 回答 2

3

scanf是一个非常生硬的工具,不擅长与非结构化输入(包括人类:-) 对话。一般来说,如果你正在与一个人互动,你应该从fgets阅读一行开始,然后将结果行分开,但最方便的是,可能包括sscanf.

它比你想象的更糟糕,因为%d如果你给它提供一些不能作为整数扫描的东西,指令就会卡住。例如,如果您输入quit now,第一个%s指令将读取单词quit,但%d会留now在输入流中,导致scanf返回 1(一次成功的转换和赋值)。下一次读取字符串的尝试将获取并使用now; 对于幼稚的代码,这似乎是第二个输入行,而不是第一个输入行的延续。

于 2013-02-27T19:25:43.883 回答
2
#include <stdio.h>
#include <string.h>

scanf("%s ", word1);
if (strcmp(word1, "quit") != 0)
    scanf("%d %s %d", &num1, word2, &num2);
于 2013-02-27T19:21:57.960 回答