2012-03-24 4 views
0

以下は、生徒データを学生構造の配列に入力するために使用している関数のコードです。私はループが終了するとき、私は限界に達しています(n)、または、これは私が問題を抱えているのですが、生徒の名前のために空白行が入力されていますか?誰か提案はありますか?私が使用している現在の方法では動作しません( 'cin.getline(PA [i]の.fullname、SLEN - 1);' 以下のif文)cinを使って空白行をテストする方法

int getinfo(student pa[], int n) 
{ 
    cout << "\nPlease enter student details:\n\n"; 

    int i; 
    for (i = 0; i < n; i++) 
    { 
     cout << "Student " << (i + 1) << ": \n"; 
     cout << " > Full name: "; 
     cin.getline(pa[i].fullname, SLEN - 1); 
     if (pa[i].fullname == NULL) 
      continue; 
     cout << " > Hobby: "; 
     cin.getline(pa[i].hobby, SLEN - 1); 
     cout << " > OOP Level: "; 
     cin >> pa[i].ooplevel;; 
     cin.get(); 

     cout << endl; 
    } 

    cout << "--------------------------------------" << endl; 

    return i; 
} 
+0

続けます。休憩する必要があります。 –

答えて

1

stringとベター、原子ループで:

std::string name, hobby, oop; 

std::cout << "Name: "; 
if (!(std::getline(std::cin, name)) { break; } 

std::cout << "Hobby: "; 
if (!(std::getline(std::cin, hobby)) { break; } 

std::cout << "OOP: "; 
if (!(std::getline(std::cin, oop)) { break; } 

// if we got here, everything succeeded. 
pa[i].name = name; pa[i].hobby = hobby; pa[i].oop = oop; 

// or better, pass a `std::vector<student> &`: 
pa.push_back(student(name, hobby, oop)); 
+0

私は変更されていない学生構造を使用しなければなりません。 const int SLEN = 30; struct student { \t char fullname [SLEN]; \t char趣味[SLEN]; \t int ooplevel; //レベル1-9 1 =初心者、9 =専門家 }; –

+0

あなたは「する必要がありますか?どうしたの?この宿題ですか、あなたはそのような質問をしていませんでしたか? –

+0

宿題ではなく、構造を使った練習でした。 –

0

getline()は空に空の文字列を読み込み、ライン。 は常にと入力してください。個人的にはstd::stringも使用します。

+0

空の文字列が読み込まれたときに、どのコードを使用してループを解除するのですか? –

+0

私はin文を次のように変更しました: if(pa [i] .fullname [0] == '0') break; 生徒の名前が何も入力されていない場合、今すぐに壊れます この非常に単純な質問のような感じは、ウェブ上の場所に値するしません!申し訳ありませんが、あなたのお手伝いをありがとうございます。 –

関連する問題