【问题标题】:using input redirection in while loop在while循环中使用输入重定向
【发布时间】:2025-12-13 18:20:11
【问题描述】:

我需要创建一个程序,通过输入重定向读取随机整数列表并使用它们执行各种任务。出于这个问题的目的,我只想打印每个数字的总和 + 1。麻烦的是,除了列表中的第一个数字,我不知道如何让它对任何东西执行操作。我的小程序(program.cpp)是

#include <iostream>
using namespace std;

int main () {
    int input;
    bool arb = true;
    cin >> input;
    while (arb) {
        cout << input + 1 << endl;
    }
    return 0;
}

我正在使用的示例文本文件 (textfile.txt) 包含

9
8
7
6

当我运行它时,它会打印出无穷大的“10”。我想做的是打印出来

10

9

8

7

或任何其他文本文件的等价物。
我想也许我可以以某种方式引用文本文件中的特定行,但是通过搜索如何做到这一点,我能找到的所有类似问题似乎都有需要 fstream 的解决方案,这是我还没有学到的东西,因此我不是允许使用它(这是用于课堂作业)。
我学过的唯一编译器指令是 iostream、string、cmath、iomanip、cstdlib 和 ctime。我学到的获取输入的方法是 cin >> input、cin.get(input) 和 cin.getline(input),所以除了我不知道的 3 种之外,如果还有其他读取文件的方法,不幸的是我不能使用它。请注意,我的程序必须使用 while 循环。程序的运行方式是

./program

这是我无法改变的。

鉴于这些限制,我怎样才能让我的程序读取并使用文本文件中的每个整数?

【问题讨论】:

  • cin 放入您的while 循环中
  • 不敢相信我错过了这么简单的东西,哇。好的谢谢

标签: c++ while-loop text-files io-redirection


【解决方案1】:

在 C++ 中读取一系列以空格分隔的整数的惯用方式是

#include <iostream>
using namespace std;

int main () {
    int input;
    while (cin >> input) {
        cout << input + 1 << endl;
    }
    return 0;
}

让我们来看看为什么会这样。

cin >> input

丢弃可能的空白,然后从标准输入中读取一个整数。此外,它返回所用 cin 对象的引用。使用此返回的引用,您可以调用bool 转换运算符来检查是否在给定的std::basic_ios 对象中设置了任何失败位。所以

while (cin >> input)

做两件事。从标准输入中读取一个整数并检查它是否成功完成了操作。只要此操作成功,您的 while 循环就会继续迭代并打印数字。

请参阅http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt 以获取有关std::basic_istream::operator&gt;&gt; 的参考信息。

请参阅http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool 以获取有关operator bool 的参考。

Edit1:将引用移至底部,以便答案更具可读性。

【讨论】:

  • 这正是我一直需要的答案。谢谢谢谢
  • 同意,除非你不应该使用using namespace std;