scanf("%d",&n);
如果用户输入'E'
,那么n
会存储什么?
当用户输入'E'
并输入整数时,我必须停止输入。
答案 0 :(得分:2)
scanf
返回匹配元素的数量。
返回值
这些函数返回成功匹配的输入项数 和分配,可以少于提供,甚至零 早期匹配失败的事件。
您可以执行以下操作:
while(scanf("%d", &n) == 1) {
// do something with n
}
答案 1 :(得分:1)
您必须检查scanf返回的内容。如果您键入“E”并拥有%d,那么您将拥有所谓的匹配失败。 检查以下scanf手册页(它适用于linux,但通常应该是相同的):scanf man page
答案 2 :(得分:-2)
您需要从scanf
获取有关两件事的信息:
n
和sscanf
)。 scanf
返回已执行的分配数。因此,如果它在分配给n
时完全成功,它将返回1,否则它将返回0.
我在这里假设输入应该是写为mantissaEexponent
的浮点,但这只是为了说明的目的。对于标准输入(scanf
):
int mantissa, exponent;
int mantissaSet = 0, int exponentSet = 0;
mantissaSet = scanf("%d", &mantissa);
char c = getc();
if (c != EOF && c == 'E') {
exponentSet = scanf("%d", &exponent);
}
if (mantissaSet) { ... /* mantissa was set */ }
if (exponentSet) { ... /* exponent was set */ }
从字符串获取输入时,如果输入中有一个输入,则需要知道在哪里查找'E'
,因此您需要添加%n
转换才能获取此信息。下面的代码说明了它如何用于字符串(sscanf
):
const char * string = "1234E56";
int mantissa, exponent;
int mantissaSet = 0, exponentSet = 0;
int charCount = 0;
int mantissaSet = sscanf(string, "%d%n", &mantissa, &charCount);
if (string + charCount == 'E') {
exponentSet = sscanf(string + charCount + 1, "%d%n", &exponent, &charCount);
...
}