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

Posted

技术标签:

【中文标题】代码在 Linux 上运行良好,但在 Windows 操作系统上给出不同的输出【英文标题】:Code runs well on Linux but gives a different output on Windows OS 【发布时间】:2012-05-21 06:09:09 【问题描述】:

我一直想知道为什么下面的代码在 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]:

【问题讨论】:

在 Windows 上,您使用的是什么编译器? 不应该是#include &lt;string&gt;吗?复制粘贴 VS Express 2010 中的代码 - 工作正常......它不会循环 getgender() 函数。你用的是什么编译器? 我正在使用带有 mingw32 的代码块。 次要注意:使用cerr &lt;&lt; 获取错误消息。 好吧,我读了一些关于cerr &lt;&lt; 的文章,但我认为它的行为方式与cout &lt;&lt; 相同,这就是我没有使用它的原因。我会试试的。谢谢:) 【参考方案1】:

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

【讨论】:

谢谢@duskwuff。我添加了“return 0”,所以getgender() 能够返回到gender,但它仍在循环中。 好的,我现在知道了 :) 忘记将 while(gender != 'm' || gender != 'f'); 更改为 while(gender != 'm' &amp;&amp; gender != 'f'); 再次感谢【参考方案2】:

我在 MSVC 2010 中编译了这段代码,它工作正常。你用的是什么编译器?

【讨论】:

不,实际上那样会更糟。您修改后的条件始终为真。 -1:答案仍然是错误的,因为 getgender 在 else 语句之后没有返回任何内容。 谢谢大家,我在esle 之后添加了return 0,现在效果很好。我在考虑程序评估if 条件后,它将return gender 并终止。再次感谢:)

以上是关于代码在 Linux 上运行良好,但在 Windows 操作系统上给出不同的输出的主要内容,如果未能解决你的问题,请参考以下文章

我的程序在 Windows 机器上崩溃,但在 Linux 上运行良好

Python paramiko/sshtunnel 代码在 linux 下运行良好,但在 Windows 下失败

来自 Linux 的 Python pysftp get_r 在 Linux 上运行良好,但在 Windows 上运行良好

来自 Linux 的 Python pysftp get_r 在 Linux 上运行良好,但在 Windows 上运行良好

为啥我的文件/目录操作在 Windows 上运行良好,但在 Linux 上却不行?

PHP 站点在 XAMPP 中运行良好,但在 linux 上重定向太多次