scanf("%s %d %s %d",word1,&num1,word2,&num2);
因此,当用户输入“退出”时,它应该停止询问其他 3 个输入。但是它要求我输入另一个“退出”,可能是因为格式中有 2%s
有没有办法解决?编辑:因为它必须在一个循环中获得 4 个输入,除非输入了退出。
scanf("%s %d %s %d",word1,&num1,word2,&num2);
因此,当用户输入“退出”时,它应该停止询问其他 3 个输入。但是它要求我输入另一个“退出”,可能是因为格式中有 2%s
有没有办法解决?编辑:因为它必须在一个循环中获得 4 个输入,除非输入了退出。
scanf
是一个非常生硬的工具,不擅长与非结构化输入(包括人类:-) 对话。一般来说,如果你正在与一个人互动,你应该从fgets
阅读一行开始,然后将结果行分开,但最方便的是,可能包括sscanf
.
它比你想象的更糟糕,因为%d
如果你给它提供一些不能作为整数扫描的东西,指令就会卡住。例如,如果您输入quit now
,第一个%s
指令将读取单词quit
,但%d
会留now
在输入流中,导致scanf
返回 1(一次成功的转换和赋值)。下一次读取字符串的尝试将获取并使用now
; 对于幼稚的代码,这似乎是第二个输入行,而不是第一个输入行的延续。
#include <stdio.h>
#include <string.h>
scanf("%s ", word1);
if (strcmp(word1, "quit") != 0)
scanf("%d %s %d", &num1, word2, &num2);