gpt4 book ai didi

C++在给程序一个.txt后从键盘读取(在in之后使用getline())

转载 作者:行者123 更新时间:2023-11-28 06:24:11 25 4
gpt4 key购买 nike

好的,这就是问题所在,我对此感到绝望。我使用

得到一个 9*9 的表
for (int i=0 ; i < 9 ; i++)
for (int j=0 ; j < 9 ; j++)
cin >> table [i][j];

我想对这张表做一些修改。所以我得到一个命令使用:

getline (cin , command); 

所以用户将键入一个命令,在解析它之后我将对表进行更改。 (它必须是 getline() 因为命令是一个字符串并且包含空格)

我有一个包含表格的 in.txt。我使用以下代码将此文件提供给我的代码:

g++ main.cpp

./a.out < in.txt .

(这两条命令都是在terminal中写的)

之后我想使用键盘发出命令。但是 getline() 没有从 keyboard 得到任何东西。我尝试使用

cin.ignore() , cin.clear() , cin.sync() , 甚至 cin.get()

但它总是通过 getline() 。

如有任何建议,我们将不胜感激。提前致谢。

最佳答案

很明显,为什么来自标准输入的任何输入都不起作用。这不限于 getline . operator>>也不会工作,也不会与 std.cin 相关联或 stdin .

这是因为./a.out < in.txt不是“给程序一个 txt”。它正在重定向标准输入。默认情况下,它是来自终端的键盘输入,但您正在将其切换为 shell 级别的文件。

如果您想将 终端关联输入切换到一个文件,然后向后切换,这会很方便:How to redirect cin and cout to files? .虽然,在您的情况下,您不会拥有与终端关联的原始缓冲区,正是因为您让操作系统不将其提供给您。您将需要以某种方式从系统中获取。这会比下面的建议更复杂(好吧,它是特定于操作系统的,而且可移植性较差)。

我建议您将文件名作为参数传递,并且不要重定向标准输入。或者,如果您无论如何都要编写一些命令提示符,请创建 load_file命令,用于加载文件。然后使用为文件设计的常规方式加载文件,例如ifstream .

关于C++在给程序一个.txt后从键盘读取(在in之后使用getline()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28805246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com