Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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++ 代码在Linux上运行良好,但在Windows操作系统上提供不同的输出_C++_Windows_Linux_Console_Mingw - Fatal编程技术网

C++ 代码在Linux上运行良好,但在Windows操作系统上提供不同的输出

C++ 代码在Linux上运行良好,但在Windows操作系统上提供不同的输出,c++,windows,linux,console,mingw,C++,Windows,Linux,Console,Mingw,我一直在想为什么下面的代码在Windows操作系统上给了我不同的输出。同时,同样的代码在Ubuntu上运行良好 #include <iostream> #include <cstring> using namespace std; string getname(void); char getgender(string); void setinfo(string,char); int main() { string customer = ""; cha

我一直在想为什么下面的代码在Windows操作系统上给了我不同的输出。同时,同样的代码在Ubuntu上运行良好

#include <iostream>
#include <cstring>

using namespace std;

string getname(void);
char getgender(string);
void setinfo(string,char);

int main()
{
    string customer = "";
    char gender;
    do {
        do{
            customer = getname();
        }while(customer =="");
        do{
            gender = getgender(customer);
            cout << "Gender in Main block is: " << gender << endl;
        }while(gender != 'm' && gender != 'f');
        setinfo(customer,gender);
        break;
    }while(1);
    return 0;
}

string getname(void)
{
    string name = "";
    cout <<"Please Enter your Name: " ;
    getline(cin,name);
    if(name == ""){
        cout << "Error: Name cannot be empty" <<  endl;
    }
    return name;
}

char getgender(string name)
{
    char gender;
    string strgender;
    cout << "Male / Female[m/f]: ";
    getline( cin,strgender);
    gender = strgender[0];
    strgender.clear();
    gender = tolower(gender);
    if(gender == 'm' || gender == 'f'){
        cout << "Gender in getgender() is: " << gender << endl;
        return gender;
    }
    else
        cout <<"Error: Must be m/ f" << endl;
}

void setinfo(string customer, char gender)
{
    string prefix;
    if(gender == 'm')
        prefix =  "Mr.";
    else
        prefix = "Ms/Mrs.";
    cout << "Hello " << prefix << " " << customer << endl;
    cout << "Welcome to TOWER HEIGHT" << endl;
}

我在MSVC2010中编译了这段代码,效果很好。您使用的编译器是什么?

gender
设置为无效值时,您的
getgender()
函数会在结尾处脱落而不返回值。这可能会导致编译器为该函数生成错误代码;尝试通过在末尾添加“return 0”来修复它

顺便说一句,您应该在Linux系统上打开警告(通过使用
-Wall
编译器标志)。这将使问题立即显现出来:

example.cpp: In function ‘char getgender(std::string)’:
example.cpp:54: warning: control reaches end of non-void function

不,事实上那会让事情变得更糟。你修改的条件总是正确的。-1:答案仍然是错误的,因为
getgender
在else语句之后不返回任何内容。谢谢大家,我在
esle
之后添加了
return 0
,现在效果很好。我在想,在程序评估
if
条件后,它将
返回gender
并终止。再次感谢:)在Windows上,您使用的是什么编译器?它不应该是
#include
?复制粘贴在VS Express 2010中的代码-工作正常。。。它不循环
getgender()
函数。你用的是什么编译器?我用的是mingw32的代码块。小注:使用
cerr好的,我读了一些关于
cerr的内容,谢谢@dashwuff。我添加了“return 0”以便
getgender()
能够返回
gender
但它仍然在循环。好的,我现在得到了:)忘记更改
而(gender!=“m”| gender!=“f”)
while(性别!='m'和&gender!='f')example.cpp: In function ‘char getgender(std::string)’:
example.cpp:54: warning: control reaches end of non-void function