2017-09-23 66 views
0

我正在解决一些项目练习。我遇到了这句话,我需要澄清。该程序要求用户输入括号和/或大括号,并检查它们是否嵌套。首先,我需要读取用户的输入如下:如何在这种情况下检测新行

while((ch = getchar()) != '\n'){ 
    // Do analysis on ch. 
} 

但我遇到了下面这句话是不是很清楚,我来了。

当程序读取换行字符,有它检查堆栈是否 是空

根据我前面提到的,而(),我永远赶不上新行字符。我怎样才能克服这个问题?我唯一想到的是在完成后检查堆栈大小,如果是这样,这意味着用户输入一个新的行字符,导致while()循环终止。但是这个解决方案并没有抓住新的路线,而是一种解决方法。任何建议!

+1

当程序读取换行符时,你的while循环将退出,所以你知道。 –

+0

您还需要检查EOF。 –

+0

我认为这是相当模糊的。你必须在'\ n'之后继续分析吗?如果你必须检查'EOF',而检查'\ n'内部的'\ n',否则你只需要在护套中添加'EOF'检查,然后退出循环。 – BetaRunner

回答

3

你可以这样做:

while((ch = getchar()) != '\n' && ch != EOF){ 
    // Do analysis on ch. 
} 
if (ch=='\n') { 
    //check your paranthesis stack 
} 

也许你都应该在\n和EOF检查你的筹码。

1

我想到的唯一的事情是同时完成后,检查堆栈的大小,如果是这样,这意味着用户进入一个新的行字符导致while()循环来终止。

这是完全正确的。

你的代码看起来应该像

while ((ch = getchar()) != '\n') { 
    // Do analysis on ch. 
} 
// check whether stack is empty 

因为在循环结束时,你知道ch包含一个换行符。