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