【问题标题】:Printing One Dimensional Array with For Loop Programming C使用 For 循环编程 C 打印一维数组
【发布时间】: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: 11000000 -> 6 0 0 0 0 0 0 0 0 0 blank space: 1 other: 0。我的完整代码在这里pastebin.com/yG7E95WF
  • @Digital_Reality 该代码正在增加数组中数字的出现次数。
  • 上面给出的代码似乎是正确的。如果您遇到错误,请发布整个代码。
  • 你对空格键过敏吗?

标签: c arrays printing printf


【解决方案1】:

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

程序中的其他所有内容在逻辑上看起来都是正确的。在那个 while 循环、getchar 和 EOF 处进行一个关键循环。

而且我不知道您是否正确使用了 getchar()。更多info

【讨论】:

  • 我上面贴的代码基本上就是整个程序,剩下的就是:#include main(){ int i,c,nother,nblank;整数 ndigits[10];其他=nblank=0;
  • 顺便说一句,我使用 ctrl-c 使 EOF 条件为真
【解决方案2】:
  1. 使用 Ctrl C 来表示输入结束不仅如此,它还表示程序终止。根据您的控制台,Ctrl DCtrl Z 可以解决问题。

  2. 确保chint 而不是char

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

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

【讨论】:

    猜你喜欢
    • 2020-12-03
    • 1970-01-01
    • 2012-11-26
    • 2015-06-12
    • 1970-01-01
    • 2013-02-20
    • 2013-08-02
    • 1970-01-01
    相关资源
    最近更新 更多