0

我正在尝试在我的 Mac 上运行一个简单的 C 程序。它工作了一段时间,但突然 scanf 停止工作。我基本上想读入一个整数值并输出输入的内容。无论我输入的整数如何,程序都会输出 0。我已经尝试了这里的建议,但没有任何效果。我已经尝试在终端和 xcode 中运行该程序,但仍然没有。有任何想法吗?

#include <stdio.h>

int main(){
  int numberOfElements = 0;
  scanf("Number of elements: %d",&numberOfElements);
  printf("%d\n",numberOfElements); //keeps returning 0 no matter the number I enter
  return 0;
}
4

3 回答 3

4

您必须打印提示,并且只扫描输入:

printf("Number of elements: ");
fflush(stdout);
scanf("%d", &numberOfElements);

一般来说,最好避免scanf()直接使用。相反,您可以获得一行输入,然后sscanf()在检索到的字符串上使用以更好地控制错误。

char line[MAX_LINE];
if (fgets(line, sizeof(line), stdin) != NULL) {
    if (sscanf(line, "%d", &numberOfElements) != 1) {
        printf("You didn't input a number: %s", line);
        /* ... */
    }
}
于 2013-06-08T00:25:38.243 回答
3

你不应该Number of elements:scanf声明中。您想将scanf语句更改为:

printf ( "Number of elements: " );
scanf ("%d", &numberOfElements );
于 2013-06-08T00:26:57.330 回答
3

当您在格式字符串中包含任何非格式字符scanf/fscanf/sscanf时,这意味着您要求这些字符出现在输入流(或输入字符串,如果是sscanf)中。如果输入中不存在这些字符,则scanf失败。空格字符虽然具有特殊含义,但会导致scanf跳过所有空格,但不需要存在任何空格。

所以,为了scanf成功

scanf("Number of elements: %d", &numberOfElements);

你必须输入,从字面上看

Number of elements: 10

或者

Numberof    elements:10

或者

Numberofelements:    10

或类似的东西。即你必须输入单词Number,ofelementsthe :。如果您只输入10scanf则会失败,因为 a10与请求的格式不匹配。

我敢肯定这不是你的意图。显然,您真正想做的是打印提示printf,然后做一个简单的

scanf("%d", &numberOfElements);

上述功能scanf可能有用,但可能仅在极少数情况下有用。这意味着,当您在格式字符串中看到任何非格式文本时scanf,很有可能出现问题。

于 2013-06-08T00:29:34.330 回答