2010-07-21 48 views
2

我在C中编写了两个程序来计算字符并打印值。如何在程序中输入数据来计算输入的字符数?

一个使用while循环和其他用途。编译时不会报告错误,但不会打印任何内容。

下面是使用代码:

#include <stdio.h> 

/* count characters and input using while */ 
main() 
{ 
    long nc; 

    nc = 0; 
    while (getchar() != EOF) 
     ++nc; 
    printf("%ld\n", nc); 
} 

下面是使用代码:

#include <stdio.h> 

/* count characters and input using for */ 
main() 
{ 
    long nc; 

    for (nc = 0; getchar() != EOF; ++nc) 
     ; 
    printf("%ld\n", nc); 
} 

编译和运行。

当我输入input并按回车时,会打印一个空白换行符。当我在没有输入任何内容的情况下回车时,再次打印空白换行符。我认为它至少应该打印为零。

+2

换行符不是EOF。 – GManNickG 2010-07-21 21:46:55

+0

我知道换行符是什么,我知道EOF是什么(在我的机器上EOF = -1)。我曾经说过,当有什么东西输入到程序中时,只会出现一个换行符,程序不会像我想要的那样打印字符数。 – MW2000 2010-07-21 21:49:47

+0

我不知道我跟着你。如果你没有按Ctrl + D或Ctrl + Z,你还没有完成执行你的程序。 – GManNickG 2010-07-21 21:52:54

回答

5

您需要终止输入到您的程序(即触发EOF测试)。

您可以在大多数Windows命令窗口的新行开始处使用Ctrl-D或Ctrl-Z在大多数unix终端上执行此操作。

或者你可以从一个文件重定向标准输入,例如:

myprogram < test.txt 

此外,你应该给主要的返回类型;隐含int已被弃用。

int main(void) 
+0

谢谢查尔斯。当它是Ctrl-D时,我正在按Ctrl-Z。一切都在工作:)。 如果隐式int不推荐使用,我是否也应该返回0;? – MW2000 2010-07-21 22:04:37

+0

@ MW2000:如果你没有一个主体,你会得到一个隐式的'return 0;',但是我个人认为最好将其明确。 – 2010-07-21 22:08:14

1

您的程序只有在看到文件结尾(EOF)后才会输出。使用CTRL-D或使用CTRL-Z在Windows上生成此文件。

0

按下键盘上的Enter,将字符\n添加到您的输入中。为了和程序打印出你需要添加'文件结束'(EOF)字符的字符数。

为了注入EOF符,您应该按在Windows在Unix中CTRL-DCTRL-Z

1

您在此等待EOF字符(文件结束)。这只会发生在两种情况:

  • 用户按Ctrl + Break(似乎在Windows上工作,但我不会指望这一点)。

  • 用户输入一个EOF字符(例如,可以用Ctrl + Z完成)。

更好的方法是检查换行符。

0

你知道换行符是一个正常字符,而不是EOF指示符吗?在大多数流行的操作系统上,EOF可以是Ctrl-D或Ctrl-Z。

1

为您的程序正常工作。在你按下后输入键,你必须确保你终止了你的循环,这样程序才能正常工作。这是通过从键盘上输入ctrl + Z来完成的。这些是对应于EOF的键。

相关问题