2012-09-10 184 views
0

下面是一個簡單的家庭作業問題,我有一個介紹CS類:C++分段故障

#include <iostream> 
#include <string> 

int main() { 
using namespace std; 
int num1; int num2; int num3; int ans; 
char oper; 
/* 
cout << "Enter an arithmetic expression:" << endl; 
cin >> oper >> num1 >> num2 >> num3; 
DEBUGGING 
*/ 

cout << "enter an operator" << endl; 
cin >> oper; /* Segmentation error occurs here... */ 
cout << "enter number 1" << endl; 
cin >> num1; 
cout << "enter number 2" << endl; 
cin >> num2; 
cout << "enter number 3" << endl; 
cin >> num3; 
cout << "okay" << endl; 

if (oper = "+") { 
    if (num1 + num2 != num3) { 
     cout << "These numbers don't add up!" << endl; 
    } 
    else { 
     ans = num1 + num2; 
     cout << num1 << "+" << num2 << "==" << ans << endl; 
    } 
} 
else if (oper = "-") {} 
else if (oper = "*") {} 
else if (oper = "/") {} 
else if (oper = "%") {} 
else { 
    cout << "You're an idiot. This operator clearly does not exist... Try again " << endl; 
} 

return 0; 
} 

我不是很熟悉分段錯誤,所以如果有人可以解釋,如果我做錯了它」 d太棒了。

+5

你輸入什麼? – chris

+4

http://en.wikipedia.org/wiki/Segmentation_fault –

+3

編譯你的程序時啓用調試信息和警告(例如Linux上的'g ++ -Wall -g'),然後學習使用調試器(例如Linux上的'gdb' )。 –

回答

-2

cin會盡量把多個字符在oper,你需要焦炭的矢量認爲cin將投入它的所有字符(包括換行符)

在這種情況下,你可以使用char oper[10]將能夠處理您正在嘗試的一個字符輸入。然而,我會建議使用std :: getline();如果使用std :: getline();我會建議使用std :: getline();如果使用std :: getline (http://www.cplusplus.com/reference/string/getline/

+1

'cin >>操作符;''將提取一個字符,不再提供,因爲'操作符'是一個'字符'。這裏有一個[示例](http://ideone.com/b4tBw)。 – chris

0

我在代碼中找不到錯誤。 VC++。

#include <iostream> 
#include <string> 
int main() { 
    using namespace std; 
    int num1; int num2; int num3=0; int ans; 
    char oper; 



    cout << "Enter an arithmetic expression: ([/ 4 2] or [+ 1 1] or [- 5 4])" << endl; 
    cin >> oper >> num1 >> num2; 

    switch (oper) 
    { 
     case '+': 
       ans=num1+num2 ; 
      break; 

     case '-': 
       ans=num1-num2 ; 
      break; 

     case '*': 
       ans=num1*num2 ; 
      break; 

     case '/': 
       ans=num1/num2 ; 
      break; 



    } 

    cout << "\nans= " << ans<<"\n\n"; 


    return 0; 

} 
+2

在評論中明確討論了OP的問題,僅僅發佈完全不同的工作代碼就不是答案。 –

1

你的代碼不能用gcc 4.1.2編譯。你使用什麼編譯器?另外,「if(oper ='+')」對我來說看起來不正確。你想給那裏的變量操作符賦「+」嗎?

-1

更改如下:

if (oper == '+') 

else if (oper == '-') {} 
else if (oper == '*') {} 
else if (oper == '/') {} 
else if (oper == '%') {} 

使用'的人物和==布爾邏輯!

+0

這是他的代碼中的一個錯誤,但不能在指定的行上引起段錯誤。 – djechlin