我真的是編程和C 的新手,在通過這里的一些練習時遇到了一個問題:
int i = 0;
向量<double>數字。
double temp;
向量<字串>單位。
字串temp2。
while ( i <= 2)
{
cin >> temp;
numbers.push_back(temp)。
cingt;> temp2;
unit.push_back(temp2)。
i;
}
所以我有這個回圈,問題是,在輸入1個周期后,一次進入temp,然后進入temp2,程式結束,在我等于2之前,而不是再去輸入一個周期。 另外,我知道在這里用for回圈會更好,只是這只是我所做的程式的一部分,而練習要求用while回圈來完成程式。 我的知識相當有限,如果可能的話,我想請你解釋得更詳細一些,就像你對你一生中遇到的最大的白癡那樣!
我不認為我在做什么。
我不認為我需要發布整個程式,并相信問題就在這里的某個地方,但以防萬一:
int main()
{
vector<double>數字。
double temp;
int i = 0;
向量<字串>單位。
string temp2;
cout << "這個程式將接受2個單位的輸入,將它們都轉換為米并進行比較
"。
while ( i <= 2)
{
cout << "
請輸入值" << i 1 << "
"。
cingt;> temp;
numbers.push_back(temp)。
cout << "
請選擇你的值的單位--米/米;厘米/厘米;英尺/英尺;英寸/英寸。
"。
cin >> temp2;
unit.push_back(temp2)。
i;
cout << i;
if (i == 1 & & unit[0] == "m" || unit[0] == "m") //列印數值1并列印其各自的單位,然后將其轉換為m。
cout << "你的第一個值是。" << numbers[0] << unit[0] < < "
"。
else if (i == 1 & & unit[0] == "in" || unit[0] == " inches"){
cout << "你的第一個值是。" << numbers[0] << unit[0] < < "。這等于" << numbers[0] / 254 << "米" << "
"。
numbers[0] /= 254;
}else if (i == 1 & & unit[0] == "cm" || unit[0] == "centimeters"){
cout << "你的第一個值是。" << numbers[0] << unit[0] < < "。這等于" << numbers[0] / 100 << "米" << "
"。
numbers[0] /= 100;
}else if (i == 1 & & unit[0] == "ft" || unit[0] == "foot"){
cout << "你的第一個值是。" << numbers[0] << unit[0] < < "。這等于" << numbers[0] * 0.3048 << "米" << "
"。
numbers[0] *= 0.3048;
}else?
cout << "對不起,我不認識這個單位。
"。
if (i == 2 & & unit[1] == "m" || unit[1] == "m") //列印數值2并列印其各自的單位,然后將其轉換為m。
cout << "你的第二個值是。" << numbers[1] << unit[1] < < "
"。
else if (i == 2 & & unit[1] == "in" || unit[1] == " inches"){
cout << "你的第二個值是。" << numbers[1] << unit[1] < < "。這等于" << numbers[1] / 254 << "米" << "
"。
numbers[1] /= 254;
}
else if (i == 2 && (unit[1] == "cm"/span>) || unit[1] == "centimeters"){
cout << "你的第二個值是。" << numbers[1] << unit[1] < < "。這等于" << numbers[0] / 100 << "米" << "
"。
numbers[1] /= 100;
}
else if (i == 2 & & unit[1] == "ft" || unit[1] == "foot"){
cout << "你的第二個值是。" << numbers[1] << unit[1] < < "。這等于" << numbers[0] * 0.3048 << "米" << "
"。
numbers[1] *= 0.3048。
}else?
cout << "對不起,我不認識這個單位。
"。
cout << "因此
值1=" << numbers[0] << " meter
" << "Value 2 =" << numbers[1] << " meters
"。
cout << "因此。
"。
if ( numbers[0] > numbers [1] & & i == 2)
cout << "你的第二個值," << numbers[1] << " m是較小的值" << " 大的值是。" << numbers[0] << " m
"。
else if (numbers[0] < numbers[1] & & i == 2)
cout << "你的第一個值," << numbers[0] << " m是較小的值" << " 大值是。" << numbers[1] << " m
"。
else if (numbers[0] == numbers[1] & & i == 2)
cout << numbers[0] << " m和" << numbers[1] << " m相等"。
if (numbers[0] > numbers [1] & & i == 2)
{
if ((numbers[0] - 0.01) < numbers[1] )
cout << numbers[0] << " m和" << numbers[1] << " m幾乎相等。" 。
}else if (numbers[0] < numbers[1] && i ==2)
{
if ((numbers[0] 0.01) > numbers[1] )
cout << numbers[0] << " m和" << numbers[1] << " m幾乎相等。" /span>;
}
}
return 0;
}
uj5u.com熱心網友回復:
問題是你的程式包含緩沖區溢位問題。
注意這里的地址凈化器在74行檢測到問題:
==1==ERROR: AddressSanitizer。heap-buffer-overflow on address 0x602000000018 at pc 0x000000406843 bp 0x7fffc3ddb350 sp 0x7fffc3ddb348
在0x602000000018執行緒T0的8尺寸的閱讀
#0 0x406842 in main /app/example.cpp:74
所以基本上程式終止了,因為在行numbers中只保留了一個數字,而你正試圖訪問第二個數字(索引為1)。
我不知道如何解決這個問題,因為你的代碼太混亂了,無法理解你的目的是什么。請盡快學會將你的代碼分成多個小函式。這將更容易閱讀正確和理解代碼作者的意圖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/309971.html
標籤:
上一篇:如何使這個回圈重復,直到正確的值被添加,Python
下一篇:如何在鋸齒狀的陣列中搜索
