scanf("%s %d %s %d",word1,&num1,word2,&num2);
所以当用户输入“退出”时,它应该停止要求其他3个输入。但它要求我输入另一个“退出”,可能是因为格式为
的2%s到底有没有? 编辑:因为它必须在循环中获得4个输入,除非输入退出。
答案 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);