scanf被跳过

我想为一个类做一个简单的C程序,其中一个要求就是我需要使用scanf / printf来处理所有的input和输出。 我的问题是,为什么我的scanf后面的for循环跳过,程序刚刚结束。

这是我的代码

 #include <stdio.h> void main() { int userValue; int x; char c; printf("Enter a number : "); scanf("%d", &userValue); printf("The odd prime values are:\n"); for (x = 3; x <= userValue; x = x + 2) { int a; a = isPrime(x); if (a = 1) { printf("%d is an odd prime\n", x); } } printf("hit anything to terminate..."); scanf("%c", &c); } int isPrime(int number) { int i; for (i = 2; i < number; i++) { if (number % i == 0 && i != number) return 0; } return 1; } 

我能够通过在第一个之后添加另一个相同的scanf来“修复”它,但是我宁愿只使用它。

stdin前一个int之后的stdin的换行符不会被最后一次调用scanf() 。 所以在for循环之后对scanf()的调用会消耗换行符,并且不需要用户input任何内容。

要更正而不必添加另一个scanf()调用,可以在for循环之后的scanf()使用格式说明符" %c" 。 这将使scanf()跳过任何前导空白字符(包括换行符)。 请注意,这意味着用户将不得不input新行以外的内容来结束程序。

另外:

  • 检查scanf()的结果,以确保它实际赋值给传入的variables:

     /* scanf() returns number of assigments made. */ if (scanf("%d", &userValue) == 1) 
  • 这是一个任务(并将永远是真实的):

     if (a = 1){ /* Use == for equality check. Note 'a' could be removed entirely and replace with: if (isPrime(x)) */