scanf("%d",&n);
如果用户进入'E'
,那么将存储n
什么?当用户输入时我必须停止输入'E'
并将输入作为整数。
scanf
返回匹配元素的数量。
返回值
这些函数返回成功匹配和分配的输入项的数量,该数量可能少于提供的数量,或者在早期匹配失败的情况下甚至为零。
您可以执行以下操作:
while(scanf("%d", &n) == 1) {
// do something with n
}
您必须检查 scanf 返回的内容。如果您键入“E”并输入 %d,那么您将遇到所谓的匹配失败。检查以下 scanf 手册页(它适用于 linux,但通常应该相同):scanf 手册页
您需要从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);
...
}