打印cout << '\n' 可以输出乱码吗?
Can printing cout << '\n' garble text output?
我有一个简单的程序来测试我正在编写的函数,该函数检测迷宫的文本文件是否有效。唯一允许的字符是 '0'
、'1'
、' '
(space) 和 '\n'
(换行符)。但是,当我使用示例文本文件执行代码时,我得到了一些奇怪的结果。在打印导入的迷宫之前,下图的第三行应显示为 "Found an illegal character [char] at [location] in maze [number]",它确实如此并且与文件匹配。
main.cpp:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
string fileName = "Mazes/Invalid4.txt";
string tempMaze;
int createdMazes = 0;
cout << "\nAttempting to open " << fileName;
fstream thing;
thing.open(fileName.c_str());
if(thing.is_open())
{
cout << "\nHurray!";
stringstream mazeFromFile;
mazeFromFile << thing.rdbuf();
tempMaze = mazeFromFile.str();
for(int i = 0; i < tempMaze.size(); i++)
{
// test to make sure all characters are allowed
if(tempMaze[i] != '1' && tempMaze[i] != '0' && tempMaze[i] != ' ' && tempMaze[i] != '\n')
{
cout << "\nFound an illegal character \"" << tempMaze[i] << "\" at " << i << " in maze " << ++createdMazes << ": \n" << tempMaze;
return 1;
}
}
cout << " And with no illegal characters!\n" << tempMaze << "\nFinished printing maze\n";
return 0;
}
else cout << "\nAw...\n";
return 0;
}
文本文件是否可能没有用 '\n'
换行?这是怎么回事?
您的文本文件的行结尾很可能是 CRLF (\r\n
)。当你输出 CR 时,它会将光标移动到行首。本质上,您首先要写 'Found an illegal character \"',然后将光标移动到行首并将其余部分写在行首。您需要以不同方式处理换行符以解决此问题。
我有一个简单的程序来测试我正在编写的函数,该函数检测迷宫的文本文件是否有效。唯一允许的字符是 '0'
、'1'
、' '
(space) 和 '\n'
(换行符)。但是,当我使用示例文本文件执行代码时,我得到了一些奇怪的结果。在打印导入的迷宫之前,下图的第三行应显示为 "Found an illegal character [char] at [location] in maze [number]",它确实如此并且与文件匹配。
main.cpp:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
string fileName = "Mazes/Invalid4.txt";
string tempMaze;
int createdMazes = 0;
cout << "\nAttempting to open " << fileName;
fstream thing;
thing.open(fileName.c_str());
if(thing.is_open())
{
cout << "\nHurray!";
stringstream mazeFromFile;
mazeFromFile << thing.rdbuf();
tempMaze = mazeFromFile.str();
for(int i = 0; i < tempMaze.size(); i++)
{
// test to make sure all characters are allowed
if(tempMaze[i] != '1' && tempMaze[i] != '0' && tempMaze[i] != ' ' && tempMaze[i] != '\n')
{
cout << "\nFound an illegal character \"" << tempMaze[i] << "\" at " << i << " in maze " << ++createdMazes << ": \n" << tempMaze;
return 1;
}
}
cout << " And with no illegal characters!\n" << tempMaze << "\nFinished printing maze\n";
return 0;
}
else cout << "\nAw...\n";
return 0;
}
文本文件是否可能没有用 '\n'
换行?这是怎么回事?
您的文本文件的行结尾很可能是 CRLF (\r\n
)。当你输出 CR 时,它会将光标移动到行首。本质上,您首先要写 'Found an illegal character \"',然后将光标移动到行首并将其余部分写在行首。您需要以不同方式处理换行符以解决此问题。