问题描述
我的任务是编写一个简单的程序来读取文件,并确定字符 '(' '[' 和 '{' 和“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;
}
更新:
我已经测试了代码,所以这是输出。
这是输出。您可以将输入重定向到任何文件,它会扫描文件直到到达 EOF。