2017-02-05 17 views
0

次のコードは、所定の学生数に対する3つの試験の平均を計算しています。
私の問題は、私はランタイムエラーが発生し続けていることです。ユーザーが-1のセンチネルナンバーを入力した後で、「任意の生徒」のパーツを停止させる方法を理解できません。
私は何が間違っているのか、何が不足しているのだろうと思いますか?ユーザがセンチネル値を入力した後にループを終了する方法は?

マイコード

#include <stdio.h> 
#include <stdlib.h> 
#include <limits.h> 

int main() { 
    /* variable definition: */ 
    char StudentName[100]; 
    char done= -1; 
    float ExamValue, Sum, Avg; 
    int students,exams; 
    int max = INT_MAX; 
    // Loop through any Students 
    for (students=0; students < max && StudentName != done; students++) 
    { 
     // reset Sum to 0 
     Sum =0.0; 
     printf("Enter Student Name and then -1 after the last student \n"); 
     scanf("%s", StudentName); 
     if (StudentName == done) 
      exit(EXIT_SUCCESS); 

     // Nested Loop for Exams 
     for (exams=0; exams < 3; exams++) 
     { 
      printf ("Enter exam grade: \n"); 
      scanf("%f", &ExamValue); 
      Sum += ExamValue; 
     } 
     Avg = Sum/3.0; 
     printf("Average for %s is %f\n",StudentName,Avg); 

    } 
    return 0; 
} 
+0

* stcmpr *文字を比較する機能!等しい場合は0を返します。 –

+1

ありがとう!それはそれだった。 –

答えて

0

問題はここにある:あなたがテストしている (StudentNameが==行われる)場合、述語はつもりではありません住所、との文字を比較しているが、予想される結果を持っています。 doneがcha​​rで、StudentNameがcha​​r配列の場合、StudentName [0]はcharですが、StudentNameはStudentName [0]のadressであるため、これら2つのオブジェクトは異なります。

ので、私はそれが期待される動作を持っている必要があり、この方法は、あなたはもうdone変数を必要としない

if(atoi(StudentName) == -1) 

をしようとするあなたをアドバイスしたいです。

+0

文字列を単純な 'char'と比較することはできません。 – usr2564301

+0

'&done'は**ヌル終端の**文字配列 – bolov

+0

へのポインタではないので、これはUBです。間違いのために申し訳ありません –

関連する問題