输入重定向 - Cin 不适用于命令行

问题描述

我的任务是编写一个简单的程序来读取文件,并确定字符 '(' '[' 和 '{' 和“balanced”。意思是,有一个匹配的右方括号/大括号/圆括号每个打开一个

我在输入时遇到问题。我们将使用输入重定向,而不是 iostream 对象,利用命令行。我们使用 makefile,当我运行可执行文件时,它告诉我 2 个错误:未使用 argc 和 argv[]。

    struct Contents {
    int numP;
    int numS;
    int numC;
};

int main(int argc,const char* argv[]) {
    char word;
    Contents c;
 
    
    while(cin >> word) {
        if(word == '{' || word == '}') {
            c.numC++;
        }
        if(word == '(' || word == ')') {
            c.numP++;
        }
        if(word == '[' || word == ']') {
            c.numS++;
        }
    }
    
    if(c.numC % 2 == 0 || c.numP % 2 == 0 || c.numS % 2 == 0) {
        cout << "Balanced" << endl;
    }
    else {
        cout << "Not Balanced" << endl;
    }
    
    return 0;
}

在这里缺少什么才能使文件重定向输入工作?当我在 XCode 中运行它时,我只输入了一堆值并且它永远不会结束。我似乎无法正确输入。

谢谢!

解决方法

您需要跳出 while 循环,如果您正在读取文件,那么您的代码应该可以正常工作。我只是在检查是否平衡时对逻辑做了一个小改动。

   int main() {
       char word;
       Contents c;

       while (cin >> word) {    
           if (word == '{' || word == '}') {
               c.numC++;
           }
           if (word == '(' || word == ')') {
               c.numP++;
           }
           if (word == '[' || word == ']') {
               c.numS++;
           }
       }
       // Edited here: Check using and instead of or.
       if (c.numC % 2 == 0 && c.numP % 2 == 0 && c.numS % 2 == 0) {
           cout << "Balanced" << endl;
       } else {
           cout << "Not Balanced" << endl;
       }

       return 0;
   }

更新:

我已经测试了代码,所以这是输出。

enter image description here

这是输出。您可以将输入重定向到任何文件,它会扫描文件直到到达 EOF。