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

标签 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 = "";
    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;
}

在我的 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]:

最佳答案

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

关于c++ - 代码在 Linux 上运行良好,但在 Windows 操作系统上提供不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10680230/

相关文章:

Python、Windows 和多处理

c# - 使用 WPF 将 Enter 键发送到外部应用程序时出现问题

linux - Linux shell 脚本中的 Pascal 三角形

c++ - 某些阵列大小的性能下降

c++ - 遍历 std::set 中包含的所有三重不同值?

java - 在数据库上更改表格后,如何自动更改 Windows 应用程序中的网格?

c - 是否可以在静态变量初始化之前对 gcc pre_init 函数执行 longjmp?

linux - DMwR linux 缺少软件包

c++ - 使用 VS2010 构建 openSmile 库

c++ - 声明普通类和类模板的静态数据成员