2016-02-10 19 views
0
vector<int> var; 
    int numb,i; 
    char temp; 

    cout<<"Enter numbers: "; 
    //Inputs integers with spaces 
    while(cin>>numb>>temp){ 
     var[i]=numb; 
     i++; 
     if(temp==char(13)){ 
      break; 
     } 
    } 
    insertionSort(var); 
    for(int a=0;a<i;a++){ 
     cout<<var[a]<<" "; 
    } 

該程序終止後輸入密鑰已被按下,任何想法如何解決它?嘗試輸入整數行和排序插入排序類型的功能與向量作爲存儲

編輯:

的程序和更新的版本,而循環壓制後不會終止回車鍵

vector<int> var; 
    int numb,i=0; 
    cout<<"Enter numbers: "; 
    while(cin>>numb){ 
     if(numb==char(13)){ 
     break; 
     } 
     else{ 
     var.push_back(numb); 
    } 
    } 
    insertionSort(var); 
    for(int a=0;a<i;a++){ 
     cout<<var[a]<<" "; 
    } 
} 

回答

0

你永遠不會初始化i所以var[i]=numb;可以是任何東西,你有不確定的行爲。你也從來沒有初始化var因此var[i]=numb;可能是任何東西,你有未定義的行爲。

也與cin>>numb>>temp不會消耗數字之間的空白。 cin已經忽略了空格,所以這會修剪您輸入的一些數字。

編輯:

您的新密碼忘了增加i,而你所得到的輸入。相反,這樣做雖然可以只使用矢量的size()功能,改變你的for循環

for(size_t a=0; a < var.size(); ++a){ 
    cout<<var[a]<<" "; 
} 

或更好,但使用的ranged based for loop

for (auto e : var) 
    std::cout << e << " "; 
+0

更改var [i] =麻木;到var.push_back(麻木):現在我不能終止循環與輸入和改變cin >>麻木>>臨時辛>>麻木 – Testermoon01

+0

@ Testermoon01我更新了答案,以顯示爲什麼你沒有得到輸出。 – NathanOliver

+0

你是對的,我的最後一個問題是,while循環仍然不會終止按下輸入,而是當我按下不同的鍵時終止。我需要輸入密鑰來終止它。有任何想法嗎? – Testermoon01

0

你並不需要手動閱讀空格,cin只會爲您忽略該空間。

所以,你只需要:

while(cin>>numb) 

而且char(13)是ASCII回車。所以,你不需要這些兩行之一:

if(temp==char(13)) 
    break; 

相反,用戶將信號EOF打破循環。在Linux中,它是Ctrl+D;在Windows中,它是Ctrl+Z

此外,其他答案都表示你應該使用push_back

的代碼是如此簡單:

while (cin >> numb) 
    var.push_back(numb); 

編輯

你更新後的代碼也存在問題。您從未更新過i,但用於打印出陣列。這是完整的工作版本。

while (cin >> numb) 
    var.push_back(numb); 

insertionSort(var); 

for (int i = 0; i < var.size(); i++) 
    cout << var[i] << endl; 
+0

我添加了push_back而不是給var [i]賦值,現在我不能停止輸入值的while循環 – Testermoon01

+0

看到我對'EOF'的編輯並在之後返回。 – user3813674

+0

試過Ctrl + Z並沒有做任何事情。如果它有幫助,我使用devC++,但仍然不能用push_back終止while循環,爲什麼我不需要if語句?我只是一個學生。 – Testermoon01