2014-02-28 179 views
0

從代碼的頂部正在工作,但令人驚訝的是,最後一個cin.get(con)不會等待輸入並終止接受任何輸入的程序,爲什麼會發生這種情況,請引導我做些什麼是錯我的代碼 -爲什麼getline不接受輸入

#include<iostream.h> 
#include<conio.h> 
#include <string.h> 
struct country 
{ 
char country[30]; 
char capital[30]; 
float income; 
}; 

void main() 
{ 
    country c[3]; 
    clrscr(); 
    for(int i=0; i<3 ; i++) 
    { 
    cout << "\n Country's name : "; 
    cin.ignore(); 
    cin.getline(c[i].country, 30); 

    cout << "\n Country's capital :"; 
    cin.getline(c[i].capital,30); 

    cout << "\n Per capita income :"; 
    cin >> c[i].income; 

    } 

char ch = 'y'; 
char cap[30]; 
int flag = 0; 
cin.ignore(); 
cout << "\n Enter Capital name : "; 
cin.getline(cap, 30); 

    for(int k=0; k<3 ; k++) 
    { 
    flag = 0; 
    if(strcmp(c[k].capital,cap)==0) 
    { 
     flag = 1; 
    } 
    if(flag==1) 
    { 
     cout<< "\n" << c[k].country << "\t" << c[k].capital << "\t" << c[k].income << "\n\n" ; 
    } 
    } 
char con[30]; 
cout << "\n Enter Country name : "; 
cin.getline(con,30); 
    for(int m=0; m<3 ; m++) 
    { 
    flag = 0; 
    if(strcmp(c[m].country,con)==0) 
    { 
     flag = 1; 
    } 
    if(flag==1) 
    { 
     cout << c[m].capital << "\t" << c[m].income << "\n" ; 
    } 
    } 
} 
+0

你真的應該得到一個新的編譯器 – Nazar554

+0

@ Nazar554我知道的朋友,但我用我的Turbo C++編譯器的限制。上帝幫助我.. – user1357093

回答

0

結合cin.operator<<getline導致奇怪的行爲。所以,這段代碼也應改變

cout << "\n Country's capital :"; 
cin.getline(c[i].capital,30); 

cout << "\n Per capita income :"; 
cin >> c[i].income; 

可能是爲了

cout << "\n Country's capital :"; 
cin.getline(c[i].capital,30); 

char buf[50]; //I don't know how long your floats are 
cout << "\n Per capita income :"; 
cin.getline(buf); 
c[i].income = atof(buf); //#include <cstdlib> 
+0

你有沒有看到代碼正確收入是浮動數據類型,我想getline()不適用於數值。 – user1357093

+0

對不起,沒有看到,會重做代碼以使用getline。 – IllusiveBrian

+0

我認爲你還沒有得到我的觀點。你正在嘗試糾正的行是完美的工作。問題在於下面的'char con [30]; cout <<「\ n輸入國家名稱:」;如果你說的問題是'cin >> c [i] .income;'那麼這些工作是如何工作的'char cap [30]; int flag = 0; cin.ignore(); cout <<「\ n輸入資本名稱:」; cin.getline(cap,30);'剛好在有問題的代碼之上 – user1357093

相關問題