2014-01-14 59 views
1

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

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用户输入,我使用记事本++和MinGW作为我的编译器。

ex。

Input: 1353466113 udahkdakdjf 
Output: 0 ^C 

Input: 000000 
Output: 6 ^C 

我已经测试我的程序与放置while循环中的printf()函数来检查数组是否持有正确的价值观和它的作用。所有的帮助非常感谢。

+0

什么是这些东西? _ ++ ndigits [c-'0']; __if(c> ='0'&& c <='9'){_ –

+1

请发表整个代码。只使用您发布的部分,代码对我来说工作得很好:'1353466113 udahkdakdjf' - >'0 3 0 3 1 1 2 0 0 0空格:2其他:11'和'000000' - >'6 0 0 0 0 0 0 0 0 0空格:1其他:0'。我的完整代码在这里http://pastebin.com/yG7E95WF – twj

+0

@Digital_Reality该代码正在增加阵列中数字的发生。 – Rahul

回答

0

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

该程序中的其他内容看起来是正确的逻辑。在while循环,getchar和EOF上做一个关键循环。

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

+0

我上面贴的代码基本上是整个程序的所有剩下的就是这样的: 的#include main(){int_i,c,nother,nblank; int ndigits [10]; nother = nblank = 0; –

+0

顺便说一句我用ctrl-c使EOF条件成立 –

1
  1. 使用Ctrl键Ç到信号输入的端确实不止于此,它signaleds程序终止。根据您的控制台,Ctrl DCtrl Z可能会伎俩。

  2. 确保chint而不是char

  3. 您对空格的测试很好,但不完整。建议

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