1 c++ linux windows 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 = "";
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;
}
Run Code Online (Sandbox Code Playgroud)
在我的Ubuntu机器上,此代码工作正常.但是当我在Windows上编译并运行它时,我获得了不同的输出并且它继续在getgender()循环.
Please Enter your Name: My Name
Male / Female[m/f]: m
Gender in getgender() is: m
Gender in Main block is: ?
Male / Female[m/f]: f
Gender in getgender() is: f
Gender in Main block is: ?
Male / Female[m/f]:
Run Code Online (Sandbox Code Playgroud)
你的getgender()功能脱落结束时没有返回值gender被设置为无效值.这可能导致编译器为该函数生成错误的代码; 尝试通过在结尾添加"返回0"来修复它.
您应该顺便打开Linux系统上的警告(使用-Wall编译器标志).这会使问题立即显现出来:
example.cpp: In function ‘char getgender(std::string)’:
example.cpp:54: warning: control reaches end of non-void function
Run Code Online (Sandbox Code Playgroud)