2013-10-21 38 views
1

我已經準備好了,但我只有一個問題,我的教授希望我們要求用戶投入多少份會有,我的問題在這裏:食譜營養轉換器

string recipeName, userInputStr, servingNumber; 

    int userInputInt; 
    double totalCals, totalCarbs; 
    // initialize accumlator variables 
    totalCals = 0.; 
    totalCarbs = 0; 
// asking for name of recipe and number of servings 
    cout << "What is the name of your recipe? "; 
    getline(cin, recipeName); 
    cout << "How many servings would you like? "; 
    getline(cin, servingNumber); 
    istringstream(servingNumber) >> totalCals, totalCarbs; 
    if (servingNumber<1 || servingNumber>10) 
    { 
    cout << "You have entered the wrong answer. " << endl; 
    return 0; 
    } 

更具體地說,它在這裏:

if (servingNumber<1 || servingNumber>10) 

我一直在<得到一個錯誤,>說「不操作這些操作數相匹配」

有人告訴我,我應該轉換字符串servingNumber爲int然後比較它,但不是它在這裏轉換嗎?:

istringstream(servingNumber) >> totalCals, totalCarbs; 

然後比較if語句嗎?

我不知道我做錯了什麼..

+0

不能讓又一個新的答案: 親愛的耶穌,我終於想通了....是啊,我意識到這是在錯誤的領域,所以我剛換周圍的一切都有點,並提出了新的int和插在了其他地方..男人花了我很長的時間來弄清楚這個問題,回答很簡單。感謝球員:) 也我一直在這裏看書,看到atoi的東西,我的課程沒有太多,所以我不認爲我應該把這個。但我意識到這是最快,最好的方法之一。 –

回答

0

您正在定義servingNumber在你的代碼的字符串。你不比較數字的string,運營商沒有爲字符串類定義。

1

你聲明的那些變量作爲字符串,但是當你把它們比作整數,沒有重載存在採取這些參數,並且沒有可接受的轉換。我想你的意思是他們是整數:

string recipeNamem userInputStr; 
int servingNumber;                /* 
^^^ 

你也不需要istringstream無論是。


另外,代替getline(cin, servingNumber),做cin >> servingNumber

0

,因爲你試圖用數字的字符串中的if語句比較你得到這個錯誤。除此之外,這個代碼還有其他一些值得關注的東西。

首先是你定義變量的方式。在C語言中的成語是在你的函數的頂部定義所有的變量,你在這裏做。然而,在C++中,我們更喜歡在使用它們的地方定義變量。我們的目標是減少想着你需要在一段代碼,做的量:

string recipeName; 
cout << "What is the name of your recipe?"; 
getline(cin, recipeName); 

string servingNumber; 
double totalCals; 
double totalCarbs; 
getline(cin, servingNumber); 
istringstream(servingNumber) >> totalCals, totalCarbs; 

if(servingNumber < 1 || servingNumber > 10) 
{ 
    cout << "You have entered the wrong answer. " << endl; 
} 

下一個問題是,istringstream(servingNumber) >> totalCals, totalCarbs;沒有做什麼,你認爲它。我不知道你打算如何使用totalCals和totalCarbs,但現在這條線只設置totalCals並且對totalCarbs沒有任何影響。

最後,你的主要問題是你試圖比較servingNumber(一個字符串)和一個原始整數。我們需要將servingNumber轉換爲整數。有些人建議atoi將做的工作,但往往被認爲是unidiomatic C++。既然你已經使用字符串流,我們可以用它來我們的數字轉換,像這樣:

string recipeName; 
cout << "What is the name of your recipe?"; 
getline(cin, recipeName); 

string servingNumberInput; 
double totalCals; 
double totalCarbs; 
getline(cin, servingNumberInput); 
istringstream(servingNumberInput) >> totalCals, totalCarbs; 

int servingNumber; 
istringstream(servingNumberInput) >> servingNumber; 
if(servingNumber < 1 || servingNumber > 10) 
{ 
    cout << "You have entered the wrong answer. " << endl; 
} 

另外,如果你不依賴於函數getline會你可以從流直接在數CIN像這樣:

string recipeName; 
cout << "What is the name of your recipe?"; 
getline(cin, recipeName); 

int servingNumber; 
cin >> servingNumber; 

if(servingNumber < 1 || servingNumber > 10) 
{ 
    cout << "You have entered the wrong answer. " << endl; 
} 

我擺脫了totalCarbs和totalCals的東西,因爲我們現在還不知道他們在做什麼。