【发布时间】:2019-11-26 23:24:13
【问题描述】:
我正在学习如何使用 getline 函数读取字符串。
我知道 getline 函数读取字符串,只要我们不按回车键或 getline 参数中的大小值交叉。就我尝试使用 getline 函数读取一行字符串而言,我没有遇到任何问题。
但是当我试图在两个不同的 char 数组中一个接一个地读取两行字符串时,我得到了我没想到的输出。 要理解我的问题,请遵循以下几行
#include <iostream>
using namespace std;
int main()
{
char line1[10];
char line2[10];
cin.getline(line1,7);
cin.getline(line2,7);
cout << "\nline1 =" << line1 <<endl;
cout << "line2 =" << line2 <<endl;
}
当我运行上面的程序时,它要求我输入,然后我给了橙色作为第一个输入并点击了输入按钮。
接下来它要求我输入第二个输入。然后我输入香蕉并点击输入按钮。在这种情况下,它会产生我预期的结果。但是如果输入橙子作为第一个输入,它不会等待我输入第二个输入。
因此 line1 存储橙色但 line2 保持空白。 现在我的问题是 line1 存储橙色没有错。但我不明白为什么 line2 保持空白不应该包含 line1 输入后剩余的数据我的意思是 line2 不应该包含 s 作为值。
因为橙色是一个 6 位数字,所以 getline 将存储前六位数字,然后在我设置 Geline 7 的大小时添加一个空字符。
然后其他剩余数据将在下一次调用 getline 函数时分配。因此不应存储在 line2 中,因为在第一次读取 new_line 字符之后。
为什么 line2 会保持空白,为什么在给出第一个输入后屏幕不会停止输入?
【问题讨论】:
-
能否请您清理构成您问题大部分的大段以便我们阅读?
-
okk.i 试图让它简短。但我认为最好对我的问题进行完整描述
-
你明白
cin.getline的第二个参数是做什么的吗? (轻推:尝试在第 1 行输入marmalade。) -
getline的语法有点奇怪。你想用第二个参数7做什么? -
很像代码,可读性将受益于结构和空白。无论如何,当您指定最多读取 7 个字符时,您期望会发生什么?当您读取
oranges时,即为 7,因此不会读取返回字符。它将被下一个getline拾取,它只会读取返回并认为它是一个空字符串。