while语句只执行两次code :: block和dev c ++

时间:2015-08-22 04:50:43

标签: c while-loop codeblocks dev-c++ getchar

大家好,我正在使用一个简单的代码:

#include <stdio.h>

void main()
{char choice;
    do
    {
        printf("\nHello World");
        printf("\nDo you wish to continue:\n");
        choice = getchar();
    }
    while(choice=='y');
}

在执行时,我得到以下输出:

Hello World
Do you wish to continue
y

Hello World
Do you wish to continue
--------------------End of Program--------------------

你会注意到, getchar()函数在第二次迭代时不起作用。 更重要的是,该计划并没有等我输入输入&#39;选择&#39;在第二次迭代。

出了什么问题?

3 个答案:

答案 0 :(得分:1)

&#34;输入&#34;在第一个输入保留在缓冲区后按下的键,在下次控制到达getchar()时读取。 为了避免这种情况,您可以在第一个之后使用另一个getchar(),这将吸收输入的换行符。或者你可以使用这个

if(c != '\n') c=getchar();

答案 1 :(得分:1)

输入<script> function readfileautomatically() { var client = new XMLHttpRequest(); client.open("GET", "/foo.txt"); client.onload = function() { var tr = document.querySelector("table tr"); var res = this.responseText.split(/\b/); var text = " from txt file will be here"; for (var i = 0; i < res.length; i++) { if (i === 0) { var elem = document.createElement("td"); elem.id = "line" + 1; elem.innerHTML = res[i] + text; tr.appendChild(elem); } else if (i === 2) { var elem = document.createElement("td"); elem.innerHTML = res[i].toLowerCase() + text; elem.id = "line" + i; tr.insertBefore(elem, tr.lastChild) } } } client.send(); } </script> <body onload="readfileautomatically();"> <table> <tbody> <tr> <td id="foo">foo</td> </tr> </tbody> </table> </body> 后,您按y键作为第二个输入。因此,程序终止,因为第二个选项不是enter,而是y ..你可以用这个

\n

第二个getchar()自动将do { printf("\nHello World"); printf("\nDo you wish to continue:\n"); choice = getchar(); getchar(); } 作为输入并跳过它

答案 2 :(得分:0)

在y之后按'enter'然后,对于下一个getchar(),输入将被视为输入。您可以刷新或使用两个getchar,只考虑第一个输入 例如:c = getchar();     d =的getchar();

中检查c in