【发布时间】:2014-02-02 02:43:52
【问题描述】:
我目前正在关注关于 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,甚至没有到达数字为白色的最后一行打印空格和其他字符。
顺便说一句,这是用户通过键盘输入,我使用 notepad++ 和 MinGW 作为编译器。
例如。
Input: 1353466113 udahkdakdjf
Output: 0 ^C
Input: 000000
Output: 6 ^C
我已经测试了我的程序,在 while 循环中放置了一个 printf() 函数,以检查数组是否包含正确的值,并且确实如此。非常感谢所有帮助。
【问题讨论】:
-
这些是什么东西? ++ndigits[c-'0']; if(c>='0'&&c
-
请贴出整个代码。仅使用您发布的部分,代码对我来说就很好:
1353466113 udahkdakdjf->0 3 0 3 1 1 2 0 0 0 blank space: 2 other: 11和000000->6 0 0 0 0 0 0 0 0 0 blank space: 1 other: 0。我的完整代码在这里pastebin.com/yG7E95WF -
@Digital_Reality 该代码正在增加数组中数字的出现次数。
-
上面给出的代码似乎是正确的。如果您遇到错误,请发布整个代码。
-
你对空格键过敏吗?