2014-03-26 20 views
1

我試圖將值輸入到大小爲10的數組,但這裏的問題是,如果用戶想要輸入4x4矩陣,他不需要完成直到數組中的第10個元素,他可以簡單地按'f'或任何字符,我試圖讓if(input =='f'),但它循環直到數組的末尾。這怎麼解決?C++終止循環使用char輸入到int

int main() { 
int input,flag=0, size=0; 
int matrix[10][10] = {0}; 

for(int i=0; i<10; i++) { 
    for(int j=0; j<10;j++) { 
     cout << "Please enter data for Row " << i << " Column " <<j << " (-200 to terminate): \n"; 
     cin >> input; 

     if(input == -200) { 
      flag = 1; 
      break; 
     } 
     else 
      matrix[i][j] = input; 
    } 
    if(flag == 1) 
     break; 
    size++; 
} 

cout << "The determinant of the matrix is: " << determinant(matrix,size) << "\n"; 
return 0; } 

回答

1

你必須改變你的閱讀輸入策略。以字符串形式讀取令牌。如果字符串的第一個字符是'f',則跳出循環。否則,從字符串中提取數字。

int main() 
{ 
    std::string input; 
    int flag=0; 
    int size=0; 
    int matrix[10][10] = {0}; 

    for(int i=0; i<10; i++) { 
     for(int j=0; j<10;j++) { 
      std::cout << "Please enter data for Row " << i << " Column " <<j << " (f to terminate): \n"; 
      std::cin >> input; 

      if (input[0] == 'f'){ 
       flag = 1; 
       break; 
      } 
      else 
       matrix[i][j] = atoi(input.c_str()); 
     } 
     if(flag == 1) 
      break; 
     size++; 
    } 
} 
+0

'的atoi(input.c_str());'可以返回一個無效數據的情況下,用戶輸入的不是'F'其他任何字符串 – rajenpandit

0

發生這種情況是因爲退出標準是值-200,當您輸入-200時,所有cylces停止工作,完成。

0

由於R Sahu告訴你,你必須改變你的閱讀輸入策略。所以,你也可以使用字符串流,以獲得解決

#include <iostream> 
#include <sstream> 
using namespace std; 
int main() { 
int input,flag=0, size=0; 
int matrix[10][10] = {0}; 
string s; 

for(int i=0; i<10; i++) { 
     for(int j=0; j<10;j++) { 
       cout << "Please enter data for Row " << i << " Column " <<j << " (-200 to terminate): \n"; 
       cin >> s; 
       stringstream ss(s); 
       ss>>input; 
       if(ss==0) 
       { 
         if(s == "f") {//user don't want to enter further input 
           flag = 1; 
           break; 
         } 
         else 
         { 
           //invalid data so you need to reset the value of i and j; 
         } 
       } 
       else 
       { 
         cout<<"Input:"<<input<<endl; 
         matrix[i][j] = input; 
       } 
     } 
    if(flag == 1) 
     break; 
    size++; 
}