C代码仅在^ Z之后打印

时间:2018-08-12 17:05:34

标签: c

我正在阅读K&R关于C的书,我到了这一部分,输出的内容是您输入的换行符数量,我想这样做,以便打印出与键入的换行符数量相对应的每个数字正在读取行。仅在按F6或CTRL + Z(EOF)后才输出nl的值。有人可以向我解释为什么吗?

class SomeDjangoView(TemplateView):
    template_name = 'template_and_that.html'

    def get(self, request):
        clever_async_function()
        return render(request, self.template_name)

# Some other file
def clever_async_function():
    with ThreadPoolExecutor(max_workers=4) as executor:
        executor.map(long_running_task, iterable_models_or_similar)

2 个答案:

答案 0 :(得分:1)

您忘记了一些括号。这是您的代码当前执行的操作:

int main(){

    int c, nl = 0;
    while ((c = getchar()) != EOF){
        if (c == '\n'){
            ++nl;
        }
    }
    printf("%d\n", nl);
}

根据缩进,这可能是您想要做的:

int main(){

    int c, nl = 0;
    while ((c = getchar()) != EOF){
        if (c == '\n'){
            ++nl;
            printf("%d\n", nl);
        }
    }
}

在C语言中,空格通常被忽略。如果要在一个块中一起运行多个语句,则需要用括号{}

包围该代码。

答案 1 :(得分:0)

仅当字符是EOF字符时,while循环才会结束。 EOF是一个特殊字符,代表程序正在读取的文件结尾。由于您是从控制台读取的,因此控制台本身就是您正在读取的文件,但是它没有尽头。但是,在您的系统中,您可以通过键入F6或CTRL + Z

将EOF字符发送到控制台。

相反,如果要在键入时打印行数,则应按以下方式更改代码:

int main(){
    int c, nl = 0;

    while ((c = getchar()) != EOF){
        if (c == '\n'){
            ++nl;
            printf("%d\n", nl);
        }
    }
}