C ++ - 使用io重定向输入和输出多个整数

时间:2016-06-02 04:12:00

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

我是C ++的新手并且编写了一个简单的程序,该程序应该将文件中的整数作为整数并以适当的方式输出格式。问题是程序在输出时会跳过其中一个值。例如(\ n表示新行)“51 123 \ n -10 \ n 153 111”将显示为“123 \ n -10 \ n 153 \ n 111 \ n 0”。此外,任何改进我的代码的提示或指示都会很棒。 这是我的代码:

using namespace std;

int main(int argc, char *argv[]) {
    size_t i;
    int n;
    int a, b, c, d, e;
    if (argc == 1) {
        while (cin >> n) {
            cin >> a;
            cin >> b;
            cin >> c;
            cin >> d; 
            cin >> e;
            cout << setw(10);
            cout << a << "\r\n";
            cout << setw(10);
            cout << b << "\r\n";
            cout << setw(10);
            cout << c << "\r\n";
            cout << setw(10);
            cout << d << "\r\n";
            cout << setw(10);
            cout << e;
        }
    } else if (strcmp(argv[1],"-x")==0) {
        /* not used yet */
    } else if (strcmp(argv[1],"-o")==0) {
        /* not used yet */
    }
}

2 个答案:

答案 0 :(得分:1)

问题1:

您正在使用n将数字读入while ( cin >> n )。该号码未写入cout。这意味着,正在读取和丢弃第一个数字。

问题2:

cin >> e;并未真正读取任何内容e。这就是为什么你在输出中有0的原因。

建议修复:

while为条件阅读所有数字。

while (cin >> a >> b >> c >> d >> e)
{
   cout << setw(10);
   cout << a << "\r\n";
   cout << setw(10);
   cout << b << "\r\n";
   cout << setw(10);
   cout << c << "\r\n";
   cout << setw(10);
   cout << d << "\r\n";
   cout << setw(10);
   cout << e;
}

答案 1 :(得分:0)

你循环条件:while(cin >> n)将尝试在变量n中存储一个整数,如果cin >> n成功则返回true,从而允许你进入循环。我不喜欢&#39;如果您的所有数据都在一个文件中并且您没有使用数组/向量迭代文件来获取文件,那么我们真正看到了使用循环的重点。使用数组将是有效的,例如:

int values[NUMBER_OF_ELEMENTS]; // if number of elements is known
std::vector<int> values;// Use vector otherwise

在任何情况下,删除你的while循环条件以及与之关联的大括号,你的代码应按预期运行。