Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ex 1-8 C编程语言_C - Fatal编程技术网

Ex 1-8 C编程语言

Ex 1-8 C编程语言,c,C,我最近买了C编程语言并尝试了Ex1-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 inp

我最近买了C编程语言并尝试了Ex1-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);
}
#包括
#包括
#包括
/*
* 
*/
int main(){
新界北、新界北、新界北;
INTC;
printf(“\nHello and Welcome:D\n这是TCPG中Ex 1-8的“答案”\n请记住,要结束输入,请键入%D\n[按继续]\n”,EOF);
getch();
对于(nl=0,nb=0,nt=0;(c=getchar())!=EOF;)//当getchar被getche()替换时,它进入循环,但不退出循环
{
普查尔(c);
如果(c=='\n')
{
nl++;
}
else如果(c=='\t')
{
nt++;
}
else if(c==“”)
{
nb++;
}
}
printf(“\n您键入了%d个空格,%d个制表符,并写入了%d行\n[按退出]”,nb,nt,nl);
getch();
返回(退出成功);
}
它只是没有进入循环! 当getchar()替换为getche()时,它进入循环但不退出:( 如果您没有猜到,putchar(c);只是为了确认它已进入循环的事实 我尝试了Ctrl+D和Ctrl+Z 我正在使用Windows8 谢谢大家:)

编辑:我第一次使用了开关盒结构,但我认为我应该按照我刚才看到的书中说的运行失败(退出值-1,总时间:5s)在我键入一点。。。 有什么想法吗?
谢谢大家:)(再次:D)

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


通常,第一个getchar()调用在第一行按enter键之前不会返回,因此如果您希望它立即“进入循环”,那么您就错了。继续打字,然后按回车键。

你真的花了钱买这本书吗?如果它包含您在这里发布的确切代码,您应该看看它是否可以返回。你确定你像书上说的那样键入了它吗?它没有进入循环的唯一原因是它显然读取了文件的结尾。检查您正在提供的输入。在这里用新行
\n
@KenWhite发布输入。这是OP写的答案代码,尽管这本书(我证实他指的是K&R;它的内容是可靠的)完全过时了,OP似乎增加了更多的年代错误。@Potatoswatter:是的,我知道。这本书似乎是从80年代初开始的,如果这是它所教的,它应该被退回,如果可能的话,支持一本至少更新20年的书。嗯,我在论坛上读过,几乎每个人都称它为“C圣经”,不管怎样,你能指出我的代码哪里错了吗@内田:我通常先按enter键,然后开始随机输入一段时间:)“第一”意味着还有第二个。“getch/getche”远远不是唯一的问题(
int c
用于
char
,变量声明使用
int nt,nl,nb;
,然后在
for
中重新声明为循环控制变量,并使用
int main()
仅举几例)。如果你用的是20世纪80年代的书,
getch/getche
是典型的例子。(海报在评论中说“我通常先按enter键,然后开始随机键入一段时间”。“在for中重新声明为循环控制变量”-不,它们不是,只是初始化了。那里没有声明(尽管在那里初始化仍然很奇怪)。“如果你使用的是20世纪80年代的书籍,那么getch/getche是典型的。”-不是K&R,因为它不是DOS书籍。“我通常先按enter键,然后开始随机输入一段时间”-是的,他按enter键一次“按enter键开始”的东西,然后可能再也不按了。我不记得是那种方式(虽然已经很久了)。我回忆起(int…)的
在循环范围内重新定义局部变量,因为
int
被包括在内(但这已经有几十年了,所以我可能记错了)
getch/getche
是大多数C RTL的一部分,包括来自Borland和Microsoft的RTL(以及当时令人惊讶的$20混合软件PowerC编译器)。“我记得for(int…)重新声明循环范围内的局部变量,因为包含int(但这已经过去了几十年,所以我可能记错了)。“-是的,这是正确的。请再次阅读代码,“int”不会出现。而且,“大多数C RTL”指的是DOS。C编程语言是一本Unix书籍,无论在何种程度上,它都可以被认为是基于特定的操作系统。是的。重读说明你是对的。:-)是的,我指的是DOS(Borland/MS/PowerC)。当时,我只对Unix是什么有一个模糊的概念。:-)很高兴我只发表了评论,没有投反对票;如果我同时做了这两件事,我现在就要绞尽脑汁想办法解决它了D