Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 输出语句在输入之前重复自身(C+;+;)_C++_Std_Cin_Cout - Fatal编程技术网

C++ 输出语句在输入之前重复自身(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

我正在编写一个代码,将温度从摄氏度转换为华氏度,反之亦然。到目前为止,除了一条输出语句无缘无故地重复之外,一切都正常。我不是很有经验(一周前只从Python移动到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;i
cin>>运行时可能会在流中留下一个行尾,导致
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;
    }

}