1
scanf("%d",&n);

如果用户进入'E',那么将存储n什么?当用户输入时我必须停止输入'E'并将输入作为整数。

4

3 回答 3

2

scanf返回匹配元素的数量。

返回值

这些函数返回成功匹配和分配的输入项的数量,该数量可能少于提供的数量,或者在早期匹配失败的情况下甚至为零。

您可以执行以下操作:

while(scanf("%d", &n) == 1) {
    // do something with n
}
于 2013-10-08T10:49:49.050 回答
1

您必须检查 scanf 返回的内容。如果您键入“E”并输入 %d,那么您将遇到所谓的匹配失败。检查以下 scanf 手册页(它适用于 linux,但通常应该相同):scanf 手册页

于 2013-10-08T10:49:37.513 回答
-2

您需要从scanf以下两方面获取信息:

  1. 是否将任何内容分配给n, 和
  2. 它消耗了多少个字符(如果您使用的是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);
   ...
}
于 2013-10-08T10:54:17.493 回答