如何在C++中的while循环中存储上一次迭代
How do I store a previous iteration in a while loop in C++?
我看到一个类似标题的东西已经得到了回答,但内容对我来说太密集了,因为我对c++不太了解。
我对编程很陌生,我不知道如何将上一次迭代存储在while循环中。我正在尝试使用while循环将用户文本写入文件,并以两个n
字符结束他们的输入。这就是我的问题所在,因为对于我当前的代码,输入以一个enter实例结束。
我的代码看起来是这样的,但我知道temp
和new_advice
是相同的:
char new_advice, temp;
while( (!(new_advice == 'n' + 'n'))) && (!(temp == 'n')) )
{
temp = new_advice;
cin.get(new_advice);
fout.put(new_advice);
}
编辑*好吧,我想我不清楚我在问什么。
最初的任务是:"允许用户输入建议,使其可以是任意行长。用户被告知通过按两次回车键来结束他或她的建议。然后,您的程序可以通过检查何时读取到连续两次出现的字符"\n"来测试是否已到达输入的末尾。">
这会改变我问题的答案吗?
我现在已经尝试用代码做到这一点:
char new_advice;
int temp = 0;
while(temp < 2)
{
if(new_advice == 'n')
{
temp = temp++;
}
cin.get(new_advice);
fout.put(new_advice);
}
但这也不起作用,我的程序不识别进入程序结束。整个节目的背景值得发布吗?
我真的不想回答你的具体问题,因为做你想做的事情的惯用方式非常不同,而且更干净:
std::ofstream outfile("output.txt");
for (std::string line; std::getline(std::cin, line); )
{
if (line.empty()) { break; }
outfile << line << std::endl;
}
这么多东西。
首先,为了清晰起见,去掉多余的括号。然后,使用a != b
而不是!(a == b)
。
这产生了while(new_advice != 'n' + 'n') && temp != 'n')
,我不确定它应该做什么(甚至忽略会导致编译错误的不匹配括号):'n' + 'n'
添加了两个字符,这是一个整数加法。但是,即使它不是,而是字符串串联,您也会随后将结果(两个字符的字符串)与单个字符进行比较。这永远不会产生true
。
现在,关于逻辑:只需用回车分隔每一行,并在末尾添加一个额外的回车字符:
std::string line;
while (std::getline(std::cin, line))
std::cout << line << "n";
std::cout << "n";
…就像π一样简单。
但除此之外,以两条换行符结束输入是不寻常的。相反,按照惯例(在UNIX中),每一行最后都由一条换行符分隔。
+
表达式中使用,则char
s将提升为int
s。你到底想比较什么?
我的代码看起来是这样的,但我知道temp和new_avice是一样的:
则此(!(new_advice == 'n' + 'n'))) && (!(temp == 'n'))
将立即失败。
你的括号不匹配。
简化您的循环,以便在您有输入时进行检查:while(cin) {
。
如果您需要存储以前的值,请将该变量仅保留在循环之外:
char previous = ' ';
while (cin) {
我认为您确实想找到一个行的末尾并添加一个'\n',但这在windows和unix之间是不可移植的。std::getline答案的效果要好得多。但是,假设你想自己做这件事。。。
在循环中声明并为当前角色指定一个值。
char current;
cin >> current;
然后通过再次检查cin
来再次检查您实际收到的有效输入。
if(!cin) {
break;
}
接下来,用这个角色做任何你需要的事情:
fout << current;
if(`n` == current) {
fout << 'n'; // though std::endl would be more portable
}
最后,更新您以前的变量。
previous = current;
}
我试着通过修复这个问题来理解所涉及的多个概念,尽管我认为你不需要这些。std::getline
答案会起作用,但不会教会你所有尝试做的事情。
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何确保用户在一行上提示输入一次时输入名字和姓氏?
- C++如何使用lambda表达式来捕获上一次迭代的值
- (C++)for循环中的空初始语句是否保存所有编译器中变量的上一次初始化
- 我应该只在免费商店上为一次调用创建对象吗?
- GoogleMock:如何保存参数,以便在模拟上的下一次调用中使用
- 为什么我的破坏者只称呼一次,而不是在删除(a)调用上
- 在功能静态变量上调用Setter一次
- 如何使结构一次只存储一个变量?C++
- 通过在上一个数组结束后立即存储下一个元素来扩展数组
- C++ 和 SDL 一次在屏幕上显示的图像不能超过 3 张
- 在 Eclipse 上,有没有办法一次修改多个包含路径
- 在动态分配时,在免费存储上指向一个新地址是一种好的做法吗
- 仅在 CUDA 上修改设备内存一次
- 如何在C++中的while循环中存储上一次迭代
- Qt - 解决一个插槽上的两个顺序调用,并且仅执行一次操作
- 重复上一次输入两次
- 调用从上一次执行中保存的函数指针会失败吗
- Opencv未能捕获上一次之后的早期点击
- (WINSOCK) c++游戏服务器:TCPAccept上一次有太多TCP连接