没有得到想要的输出
Not getting desired output for cin.getline(),
我今天刚刚开始学习c++,我已经看了很多关于这个主题的文章。在搜索时,我发现了一个名为ignore的函数,这在某种程度上有所帮助。我最初的问题是运行时跳过输入。我发现这可能是由于n仍在缓冲区中,所以我使用cin.ignore()函数将其清除。然而,我仍然没有得到我想要的输出。下面是我的代码:
{
time_t current;
char event[30];
char details[256];
char outFileName[21];
cout<< "Enter name of file to hold the input.[20 Character Max]: ";
cin>>outFileName;
ofstream outFile(outFileName);
cout<< "Event: ";
cin.getline(event, 30, 'n');
cin.ignore();
outFile<< event<< 'n';
cout<< "Details: ";
cin.getline(details, 256, 'n');
cin.ignore();
outFile<< details<< 'n';
current = time(NULL);
outFile<< ctime(¤t);
}
对于输出,第一行是黑色的,第二行列出了应该在第一行的内容,它也缺少了第一个字母,第三行是系统时间。
放一个空格。在输入文件名之后忽略。从cin>>outFileName;
返回的回车被下一个cin吸收。
我也不确定是否忽略是正确的命令在这里使用。如果这不起作用,试试cin.clear()
或cin.sync()
。我还在学习c++。
让我们想象以下用户输入:
Enter name of file to hold the input.[20 Character Max]: foo
Event: something
Details: blah blah
首先,
cin>>outFileName
将从cin
中提取字符,直到找到空白。foo
之后的第一个空白字符是n
。此n
未被提取,因此仍留在输入流中。那么
cin.getline(event, 30, 'n');
将尝试从cin
中提取最多29个字符的一行,并在到达n
时停止。正如我们刚才看到的,foo
之后的n
留在了流中,所以它只会读取到它,它之前实际上没有字符。然后将n
提取并丢弃,event
将为空字符串。然后执行
cin.ignore();
,这将忽略单个字符。流中n
之后的下一个字符是something
开头的s
。然后输出
event
,这是一个空字符串,所以你得到一个空行。然后
cin.getline(details, 256, 'n');
将提取255个字符,直到它遇到n
,在这种情况下将提取omething
(记住,我们已经忽略了s
),然后提取并丢弃下面的n
。则
cin.ignore()
将忽略blah blah
的第一个字符,即b
。则输出包含
omething
的details
然后输出系统时间,正如您所说的,这很好,因为它不是来自输入流。
所以主要的问题是你在错误的地方使用cin.ignore()
。您在getline
之后使用它,但是getline
在行尾提取并丢弃n
。需要使用cin.ignore()
的地方是使用>>
从cin
中提取。这个并没有提取新行,它只是停在它。
简单地去掉你现在拥有的cin.ignore()
,并在cin>>outFileName;
后面放置一个。
但是,考虑当用户输入foo bar
作为文件名时的问题。foo
将被提取,但barn
将留在流中。如果您想忽略该行的其余部分,您需要这样做:
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
我很困惑。您是否尝试从文件中读取,然后写入文件??
编辑:我想我知道你想做什么了。您可以忽略以下内容。您没有从文件中读取任何内容。cin。Getline从键盘获取输入。你想要的是实例化一个文件对象来读写一个文件。
//Create a file that reads AND writes
std::fstream readAndWrite(outFile, std::ios::in | std::ios::out);
注意ostream,而不是ofstream(即ifstream用于读,ofstream用于写,fstream用于两者)
//Check to see if the file opened
if(readAndWrite.is_open())
{
cout<< "Event: ";
readAndWrite.getline(event, 30, 'n');
readAndWrite << event << 'n';
//Same for the rest of your code
//Close file
readAndWrite.close();
}
else
std::cout << "nFile did not open! " << std::endl;
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 如何根据单词在文本中出现的概率输出单词