0

我最近购买了 The C Programming Language 并尝试了 Ex 1-8 这是代码

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

/*
 * 
 */
int main() {
    int nl,nt,nb;
    int c;
    printf("\nHello and Welcome :D\nThis is the 'answer' to Ex 1-8 in TCPG\nRemember,to end input,type in %d\n[Press <ENTER> to continue]\n",EOF);
    getch();
    for(nl = 0,nb = 0,nt = 0;(c = getchar()) != EOF; ) // When getchar is replaced by getche() it goes into the loop but doesnt exit the loop
    {
        putchar(c);
        if(c == '\n')
        {
            nl++;                        
        }
        else if(c == '\t')
        {
            nt++;
        }
        else if(c == ' ')
        {
            nb++;
        }
    }
    printf("\nYou typed in %d blanks, %d tabs and wrote %d lines\n[Press <ENTER> to exit]",nb,nt,nl);
    getch();



    return (EXIT_SUCCESS);
}

它只是不进入循环!当 getchar() 被 getche() 替换时,它进入循环但不退出:( 如果你没有猜到,putchar(c); 只是为了确认它已经进入循环的事实我试过 Ctrl + D 和Ctrl + Z 我正在使用 Windows 8 谢谢大家 :)

编辑:我首先使用了一个 switch case 结构,但我认为我应该按照我刚刚看到它说 RUN FAILED (exit value -1, total time: 5s) 在我输入一点后的书...有什么想法吗?谢谢大家:)(再次:D)

4

1 回答 1

1

首先,您不应该使用或 getch/getche,它们不是标准的 C。当您在循环中使用 getche 时,您的问题是 MS Windows 上的此功能不处理文件结尾控件。

通常,第一个 getchar() 调用要等到您在第一行按下回车后才会返回,所以如果您期望它立即“进入循环”,那您就错了。只需继续输入并按回车即可。

于 2013-08-31T05:03:31.280 回答