如何使用getchar运行程序?

时间:2010-01-04 21:54:42

标签: c getchar

我是一名C n00b试图在K& R上自学C语言。我的问题有点令人尴尬的基本问题。好的,这里说:我无法使用getchar获取程序,以提供我期望的那种输出。如果您碰巧手头有K& R,我会坚持锻炼1.13。问题是,“编写一个程序来打印输入中单词长度的直方图。”由于我遇到这个问题,我甚至无法处理横向版本。

我在XP上使用Dev-C ++(mingW编译器)并在命令行下运行程序。我的问题是,当我尝试运行我的程序时,它等待我输入要扫描的字符,但是当我完成输入并按Enter键时,它不会执行任何。我希望它继续按照我的预期打印直方图。实际上,它似乎甚至没有计算字长,因为你可以在代码中看到,当我尝试打印ctr数组中的内容只是为了看它是否包含任何东西时,什么都没有打印出来。

我是如此n00b,我不知道这是我的代码还是命令行有问题。但我怀疑它与系统有关,因为当我尝试编译并运行a model program时,同样的事情发生了。输入输入,按Enter键,没有任何反应。如果我是Ctrl-C,有时会吐出一个星号或两个看起来与模型输出完全不同的星号。其他时候,它没有做任何事情(只是回到提示)。

这是我练习的代码。我花了一整天的时间来质疑我继续编程的能力。如果有人能让我走出这个洞,我真的非常感激!

另外,我还有另一个关于我上面提到的模型程序的问题,但我想我应该在它自己的问题中发布它。谢谢大家:))

#include <stdio.h>

//#define 1 IN
//#define 0 OUT
int main () {
    //start w/ state = OUT
    int c = 0;
//    int state = OUT;
    int len = 0;
    int ctr[12];
    int i, j;
    i = j = 0;

    for (i = 0; i <12; i++)
        ctr[i] = 0;
    while ((c = getchar()) != EOF)
       if (c != ' ' && c != '\t' && c != '\n') {
//            state = IN;
            len++;
            printf("%d", len);
            }
       else {
            ctr[len]++;
            len = 0;
            }            
    for (i = 0; i <12; i++) 
        printf("%d\n", ctr[i]);
    for (i = 0; i <12; i++) {
        printf("%d\n", i);   
        for (j = 0; j <= ctr[i]; j++)
            printf("-");
        printf("\n");
        }
    return 0;
}

3 个答案:

答案 0 :(得分:7)

你的while循环正在寻找EOF,它代表文件结尾,而不是行尾。

在Windows上,您需要输入ctrl-z来模拟文件结尾。

答案 1 :(得分:1)

看起来你实际上并没有将c(你的输入)存储在任何地方......也不打印它。您正在打印字符串的大小,但不是实际的字符。如果你ctr [i] = c;某处(即你将字符添加到数组中),然后打印数组,你会看到你的输入。哦,是的,关于ctrl-z的答案也很重要。 此外,如果您对该语言完全陌生,我强烈建议您在内容中添加括号。在你可以只看一眼代码并知道什么会落入while循环的范围之前会有一段时间,如果你没有围绕它的话,那将会是什么。

答案 2 :(得分:1)

我没有看到代码有什么问题,所以我把它加载到gcc下它似乎工作正常,只要你记得你必须放入一个EOF(CTRL-D)来终止while循环。我输入了4行,虽然我无法对答案的正确性做出任何陈述,每次我按下Enter键时,我得到一系列数字,等于我输入的字符数,后跟一个空格。这正是您的代码所要做的。

当我输入CTRL-D时,我收到了摘要信息。同样,我不打算对输出的正确性做任何陈述,但我确实得到了代码中描述的两个主要部分。