使用For循环编程打印一维数组C.

时间:2014-01-14 05:41:23

标签: c arrays printing printf

我目前正在阅读关于c编程的K& R书籍,我遇到了使用带有数组的printf()函数的问题。数组应该保存的所有内容都是正确的,因为我已经测试了在初始while循环中打印每个元素,但是当我尝试在while循环之外和main()函数内打印时,我没有得到所需的答案。这是代码。

for(i=0;i<10;++i){
    ndigits[i]=0;
}
while((c=getchar())!=EOF){

    if(c>='0'&&c<='9'){
        ++ndigits[c-'0'];
    }
    else if(c==' '||c=='\t'||c=='\n'){
        ++nblank;
    }
    else{
        ++nother;
    }
}

for(i=0;i<10;++i){
    printf("%d ", ndigits[i]);
}
printf(" blank space: %d other: %d\n", nblank, nother); 

该程序应该计算空格,其他字符并存储数组中每个数字的出现次数。当我注释掉用于打印数组的for循环时,计算空格和其他字符的工作正常。但是,当我在没有注释掉打印数组的情况下运行程序时,它只打印数组中的第一个元素,即零的数量,旁边是^ C,甚至不到达数字白色的最后一行打印空格和其他字符。

用户通过键盘输入btw,我使用notepad ++和MinGW作为我的编译器。

离。

Input: 1353466113 udahkdakdjf
Output: 0 ^C

Input: 000000
Output: 6 ^C

我测试了我的程序,在while循环中放置了一个printf()函数,以检查数组是否保持正确的值,并且确实如此。非常感谢所有帮助。

2 个答案:

答案 0 :(得分:1)

  1. 使用 Ctrl C 来表示输入结束不止于此,它表示程序已终止。根据你的控制台, Ctrl D Ctrl Z 可以解决问题。

  2. 确保chint而不是char

  3. 您对空白区域的测试很好,但不完整。推荐

    #include <ctype.h>
    ...
    // else if(c==' '||c=='\t'||c=='\n'){
    else if (isspace(c)) {
    

答案 1 :(得分:0)

@ user3191564:我刚刚在笔记本电脑上测试了你的代码,它给你的输出和输出相同。我认为EOF标志会给你带来奇怪的输出。

程序中的其他所有内容在逻辑上都是正确的。在while循环,getchar和EOF处进行关键循环。

我不知道你是否正确地使用了getchar()。更多info