我正在从文本文件中读取一行,并使用 for 循环打印该行中的每个字符。为什么
0
行的第 p
个字符没有被打印?
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
const int max_length = 100; // Adjust this based on your text size
char line1[max_length];
freopen("input2.txt", "r", stdin);
cin.getline(line1, max_length);
for (int i = 0; line1[i] != '\0'; i++)
cout<<line1[i]<<" ";
cout << "\n";
for (int i = 0; line1[i] != '\0'; i++)
cout<<line1[i];
cout << "\n";
fclose(stdin);
return 0;
}
在文件中输入:
pqrstuwvx
输出:
q r s t u w v x
pqrstuwvx
但是,如果我以这种方式编写
cout
语句 cout<<line1[i];
,它会给出正确的输出。请解释一下原因。
@Deba 在我看来,这个问题与使用
freopen
将标准输入 (stdin
) 重定向到文件有关。
当您使用
cin.getline
读取一行时,它会将换行符 ('\n'
) 留在输入缓冲区中。因此,当您开始使用 for
循环打印字符时,遇到的第一个字符是换行符,这就是为什么您看不到正在打印的 p
。
为了解决此问题,我尝试在从文件中读取该行后添加对
cin.ignore
的额外调用。这是修改后的代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
const int max_length = 100; // Adjust this based on your text size
char line1[max_length];
freopen("index2.txt", "r", stdin);
cin.getline(line1, max_length);
// Add this line to consume the newline character
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
for (int i = 0; line1[i] != '\0'; i++)
cout << line1[i] << " ";
cout << "\n";
for (int i = 0; line1[i] != '\0'; i++)
cout << line1[i];
cout << "\n";
fclose(stdin);
return 0;
}
希望对您的理解有所帮助。