为什么我的C编译器跳过第二个scanf?

时间:2018-03-31 16:50:32

标签: c scanf

我的程序看起来像这样。

int main(){

   int maxnote = 0;
   int eingabewert;
   int n = 0;
   int userMarks[200];
   ind promark;

   printf("Welcome, plese enter your points, -1 to finish.\n");

   while (eingabewert != -1){
   scanf("%d", &eingabewert);

   if(eingabewert < -1){
     printf("A student can't have 0 > points.\n");
     exit(0);
    }
    userMarks[counter] = eingabewert;
    counter += 1;
   }
   printf("Please insert, the least pints needed for 6:");
   //Second Scanf doesn't work, it stays in a Loop or something like that
   scanf(" %d", &maxnote);
   for(int i = 0; userMarks[i] != -1; i++){
     userMarks[i] = berechneNote(userMarks[i], maxnote);
   }
   countMarks(userMarks);
   notenstats(userMarks);
   promark = ((suffmark/counter) * 100);
   printStatistic(maxnote, promark);
}

第一个Scanf()完美地完成工作并获取给定的数字。

然而第二个不是这样做的。

它停留在循环中,我无法继续使用我的代码。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:3)

因为您在

中使用了eingabewert未初始化
while (eingabewert != -1){

使用

初始化它
int eingabewert = 0;

并始终检查scanf

的结果
while ((eingabewert != -1) && (scanf("%d", &eingabewert) == 1))

您还在

中使用userMarks未初始化
for(int i = 0; userMarks[i] != -1; i++){

在这种情况下(数组)使用

初始化它
int userMarks[200] = {0};

答案 1 :(得分:0)

第二个scanf中的格式说明符中有一个空格。你应该学习如何使用调试器,比如gdb。它比在SO上发布如此长的问题要快得多。