C Scanf突然停止读取数值

时间:2013-06-08 00:22:37

标签: c integer printf scanf

我正在尝试在Mac上运行一个简单的C程序。它工作了一段时间,但突然scanf停止工作。我基本上想要读取整数值并输出输入的内容。无论我输入的整数,程序都保持输出0.我已经尝试了建议here但没有任何效果。我试过在终端和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;
}

3 个答案:

答案 0 :(得分: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);
        /* ... */
    }
}

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

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

因此,为了使scanf成功

scanf

你必须输入,字面意思

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

Number of elements: 10

Numberof    elements:10

或类似的东西。即您还必须输入单词Numberofelements: 10 Numberofelements。如果您只输入:,则10将失败,因为仅scanf与请求的格式不匹配。

我确定这不是你的意图。显然,你真正想做的是使用10打印提示,然后做一个简单的

printf

scanf("%d", &numberOfElements); 的上述特征可能有用,但可能只在少数情况下使用。这意味着当您看到scanf格式字符串中的任何非格式文本时,很可能出现问题。