C++ 我调试下面的代码时遇到问题。我在visual studio中获得了正确的输出,

C++ 我调试下面的代码时遇到问题。我在visual studio中获得了正确的输出,,c++,C++,在visual studio中运行此代码时,我得到了正确的输出:正确的输出如下所示: 但是当我在hopper(unix)中运行相同的代码时,我得到了一些奇怪的输出。。 看起来是这样的: 代码如下: //#include <mysql.h> #include <iomanip> #include <iostream> #include <string> #include <fstream> #i

在visual studio中运行此代码时,我得到了正确的输出:正确的输出如下所示:

但是当我在hopper(unix)中运行相同的代码时,我得到了一些奇怪的输出。。 看起来是这样的:

代码如下:

//#include <mysql.h>
    #include <iomanip>
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <sstream>
    #include <conio.h>


    using namespace std;



    int main()
    {
        //connect= mysql_init(&mysql);
        //connect=     mysql_real_connect(&mysql,SERVER,USER,PASSWORD,DATABASE,0,0,0);

        cout<<endl;

        ifstream inFile;
        ofstream outFile;

        inFile.open("team.txt");
        if (inFile.fail())
        {
            cout<<" ***ERROR*** File not found ***ERROR*** "<<endl;
            //exit(1);
        }
        else
        {
            string sqlQuery2;
            int numOfLines=0;
            while(!inFile.eof())
            {
                numOfLines++;
                string line;
                getline(inFile,line) ; 

                int y = line.length(); 

                string nums,city,conf,name; 

                int count=0;
                for(int x=0;x<y;x++)
                {
                    if(line[x]!=':' && count==0)
                    {
                        nums+=line[x];

                    }           
                    else if(line[x]!=':' && count==1) 
                    {
                        city+=line[x];
                    }
                    else if(line[x]!=':' && count==2) 
                    {
                        conf+=line[x];
                    }
                    else if(line[x]!=':' && count==3) 
                    {
                        name+=line[x];
                    }
                    else if (line[x]==':')
                    {
                        count++;
                    }
                }
                sqlQuery2="INSERT INTO team VALUES ("+nums+",'"+city+"','"+conf+"','"+name+"');";
                cout<<sqlQuery2<<endl;
                //mysql_query(connect,sqlQuery2.c_str());
            }
        }

        inFile.close(); 

        _getch(); 
        return 0;
    }
/#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
//connect=mysql\u init(&mysql);
//connect=mysql\u real\u connect(&mysql,服务器,用户,密码,数据库,0,0,0);

cout我认为问题在于您的输入文件team.txt是在Windows机器中创建的,它有DOS风格的行结尾

如果你加一张支票

else if (line[x]=='\r')
{
   // Ignore the character
}
在非Windows计算机上,输出应该正常

改进建议

使用

while(!inFile.eof())
{
充满问题。有关详细信息,请参阅

更换块:

  while(!inFile.eof())
  {
     numOfLines++;
     string line;
     getline(inFile,line) ; 


看起来您遇到了行尾冲突。在windows中,行尾是
\r\n
(“回车”、“换行”),在Unix中,行尾只是
\n

这意味着
字符串的末尾有一个回车符

代码当前正在将此回车符放入
name
变量中,然后将其添加到
sqlQuery2
字符串中。输出值时,回车符将光标移动到当前行的开头,并开始覆盖输出

一种解决方案是修复数据文件。您可以使用dos2unix实用程序来修复数据文件,或者有许多其他方法。有关详细信息,请参阅本文。您还可以更改将数据文件放入unix系统的方式(ftp可以自动更改)


如果您不想这样做,您可以添加代码以在
字符串中查找
\r
,并忽略它。

Read/bottom line,使用
while(getline(infle,line)){…}
底线--不要将Windows文本文件放到UNIX框中,然后向UNIX谎称它是文本文件。谢谢!我确实使用ftp传输了文件。我将尝试添加代码以忽略\r解决方案的存储库。
  string line;
  while(getline(inFile,line))
  {
     numOfLines++;