代码之家  ›  专栏  ›  技术社区  ›  Bad Request

如何使用getchar运行程序?

  •  4
  • Bad Request  · 技术社区  · 16 年前

    我是一个彻头彻尾的C n00b,试图从K&R我的问题有点让人难堪。好的,这里是这样的:我无法让程序使用getchar给出我所期望的输出。如果你碰巧有K&手上拿着R,我被困在练习1.13中。问题是,“编写一个程序来打印输入中单词长度的直方图。”由于这个问题,我甚至不能处理水平版本。

    任何东西 . 我希望它能像我期望的那样继续打印直方图。事实上,它甚至不计算字长,因为正如您在代码中看到的,当我试图打印ctr数组中的内容,只是为了查看它是否包含任何内容时,不会打印任何内容。

    a model program ,同样的事情也会发生。输入,按回车键,什么都不会发生。如果我按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 回复  |  直到 11 年前
        1
  •  7
  •   R Samuel Klatchko    16 年前

    您的while循环正在查找EOF,它表示文件的结尾,而不是行的结尾。

    在Windows上,需要键入ctrl-z以模拟文件结尾。

        2
  •  1
  •   Yevgeny Simkin    16 年前

    看起来你实际上并没有把c(你的输入)存储在任何地方。。。也不打印。您正在打印字符串的大小,但不是实际字符。如果您ctr[i]=c;在某个地方(即将字符添加到数组中),然后打印数组,您将看到您的输入。哦,是的,关于ctrl-z的答案也很重要。 另外,如果你对这门语言完全陌生,我强烈建议你在你的while内容周围加上括号。你需要花一段时间才能浏览一下代码,知道哪些内容将属于while循环的权限范围,如果没有括号,哪些内容将不属于while循环的权限范围。

        3
  •  1
  •   jfawcett    16 年前

    我没有发现代码有任何真正的错误,所以我在gcc下加载了它,它似乎工作得很好,只要您记住必须输入EOF(CTRL-D)来终止while循环。我输入了4行,虽然我不能对答案的正确性做出任何声明,但每次我按enter键时,我都会得到一系列数字,这些数字等于我输入的字符数,后跟一个空格。这正是您的代码所说的。

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