C++ 输出语句在输入之前重复自身(C+;+;)
我正在编写一个代码,将温度从摄氏度转换为华氏度,反之亦然。到目前为止,除了一条输出语句无缘无故地重复之外,一切都正常。我不是很有经验(一周前只从Python移动到C++),所以所有的帮助都被赏识了。 这是我的代码:C++ 输出语句在输入之前重复自身(C+;+;),c++,std,cin,cout,C++,Std,Cin,Cout,我正在编写一个代码,将温度从摄氏度转换为华氏度,反之亦然。到目前为止,除了一条输出语句无缘无故地重复之外,一切都正常。我不是很有经验(一周前只从Python移动到C++),所以所有的帮助都被赏识了。 这是我的代码: #include "stdafx.h" #include <iostream> #include <string> using namespace std; int ConvertCelsius(int C) { int F; F = C
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int ConvertCelsius(int C)
{
int F;
F = C *(9 / 5) + 32;
return F;
}
int ConvertFah(int F)
{
int C;
C = (5 * (F - 32)) / 9;
return C;
}
int Conversion(string conv)
{
if (conv == "CF") {
int C;
cout << "Enter Celsius temperature: ";
cin >> C;
int F = ConvertCelsius(C);
cout << "Equivalent Fahrenheit temperature: " << F << endl;
return 0;
}
if (conv == "FC") {
int F;
cout << "Enter Fahrenheit temperature: ";
cin >> F;
int C = ConvertFah(F);
cout << "Equivalent Celsius temperature: " << C << endl;
return 0;
}
else {
cout << "Invalid conversion type." << endl;
return 1;
}
}
int main()
{
int runs;
cout << "How many conversions to be done? ";
cin >> runs;
cout << " " << endl;
for (int i = 1; i <= runs; i++) {
string conv;
getline(cin, conv);
cout << "Enter conversion type: Celsius to Fahrenheit [CF] or Fahrenheit to Celsius [FC] ";
if (conv != "") {
int check = Conversion(conv);
runs = runs + check;
}
else {
runs = runs + 1;
}
}
return 0;
}
在这里,您可以看到“输入转换类型:摄氏到华氏[CF]或华氏到摄氏[FC]”行出现两次。在用户输入CF或FC之前,它只应出现一次。之后,第二行只能是“输入摄氏温度:”或“输入华氏温度:”
我自己也试过想办法,但到目前为止都失败了。感谢您的帮助。谢谢
编辑:我看了一个建议的解决方案(),但是它指出了当使用命令获取两个输入时getline()的问题。在我的情况下,我只接受一次输入,但是出于某种原因,它在for循环和conv函数之外输出一条语句 我能够使用user4581301答案解决这个问题。标签副本中也提到了这一点。我在主函数中的新for循环如下所示:
for (int i = 1; i <= runs; i++) {
string conv;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //adding this line fixed the problem
cout << "Enter conversion type: Celsius to Fahrenheit [CF] or Fahrenheit to Celsius [FC] ";
getline(cin, conv);
if (conv != "") {
int check = Conversion(conv);
runs = runs + check;
}
else {
runs = runs + 1;
}
}
for(int i=1;icin>>运行时可能会在流中留下一个行尾,导致getline(cin,conv);
立即返回并为空。旁白:C*(9/5)+32;
不会产生预期的结果,因为整数除法:9/5==1
所以这就像您正在做C+32
是否应该getline(cin,conv);
和cout@user4581301这是我在调试器中注意到的一种可能性。有没有办法解决它?@user1320881我一开始试过,但没有解决问题,而是用第一行而不是第二行重复了这一行(“输入转换类型:摄氏到华氏温度[CF]或华氏到摄氏温度[FC])输入转换类型:摄氏到华氏[CF]或华氏到摄氏[FC]”)
for (int i = 1; i <= runs; i++) {
string conv;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //adding this line fixed the problem
cout << "Enter conversion type: Celsius to Fahrenheit [CF] or Fahrenheit to Celsius [FC] ";
getline(cin, conv);
if (conv != "") {
int check = Conversion(conv);
runs = runs + check;
}
else {
runs = runs + 1;
}
}