Jadi, saya tahu ada beberapa pertanyaan yang terkait dengan ini di situs web ini, tetapi saya tidak dapat menemukan satu pun yang seperti masalah saya.

cout<<"Please enter one or more floating point numbers"<<endl<<"When finished, enter 'q'"<<endl;

while(!done)

{
    cin>>Next;
    char letter;
    double temp;
    letter=Next[0];
    if (letter=='q')
        done=true;

    if (!done)
       temp = stod(Next);
       cout<<"temp is "<<temp<<" Next is "<<Next<<endl;
       localdata.push_back(temp);
}

Dan output standar, setelah memasukkan 100.0, 10.0, 1.0 dan q adalah seperti ini -

Please enter one or more floating point numbers
When finished, enter 'q'
100.0
The value of done is 0
temp is 100 Next is 100.0
10.0
The value of done is 0
temp is 10 Next is 10.0
1.0
The value of done is 0
temp is 1 Next is 1.0
q
The value of done is 1
temp is 1 Next is q

Jadi, masalahnya adalah ketika input standar adalah q, nilai done harus berubah menjadi true, tetapi tetap if(!done) berikutnya akan dieksekusi, yang seharusnya tidak.

Apa yang bisa menjadi masalah? Aku tahu itu pasti sesuatu yang cukup jelas, tapi aku tidak bisa menebaknya!

c++
-2
user1993 21 September 2019, 07:24

1 menjawab

Jawaban Terbaik

Anda menghilangkan kawat gigi. Dalam C++, tanpa kurung kurawal, if hanya mengambil baris pertama. Anda harus menggunakan kawat gigi:

if (!done) {
    temp = stod(Next);
    cout<<"temp is "<<temp<<" Next is "<<Next<<endl;
    localdata.push_back(temp);
}

Anda bisa membiarkan if (letter=='q') apa adanya (baris pertama diambil), tetapi akan lebih baik jika Anda menggunakan {} di mana-mana.

3
CoderCharmander 21 September 2019, 04:30