【问题标题】:For Loop Stuck (.C) [closed]For Loop Stuck (.C) [关闭]
【发布时间】:2014-09-22 04:48:29
【问题描述】:
#include <stdio.h>

int main(void)
{
int ASCII[20] = { 92, 110, 92, 116, 92, 118, 92, 98, 92, 114, 92, 102, 92, 92, 92, 39, 92, 34, 92, 0 };

char *Constants[] = { '\n', '\t', '\v', '\b', '\r', '\f', '\\', '\'', '\"', '\0' };

int Decimal[8] = { 128, 64, 32, 16, 8, 4, 2, 1 };

int Binary[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };

int val;



for (int i = 0; i < 20; i++){
    val = ASCII[i];
    val++;  //calculations were one off, so countered mis-calculations with this


    for (int i = 0; i < 8; i++){

        if (val > Decimal[i]){
            val -= Decimal[i];
            Binary[i] = 1;
        }
    }
    for (int i = 0; i < 8; i++){

        printf("%d", Binary[i]);
    }
    if ((i + 1) % 2 == 0){
        printf("%\n");
    }
}

我对 C 语言比较陌生,我正在尝试创建一个将小数(常量)转换为二进制值的简单程序。然而,循环似乎在第一次迭代后卡住了,如下所示:

0101110001111110
0111111001111110
0111111001111110
0111111001111110
0111111001111110
0111111001111110
0111111001111110
0111111001111110
0111111101111111
0111111101111111

请帮忙。

【问题讨论】:

  • 源代码不完整。
  • 你能澄清一下吗?
  • 您是否打算将最后一个 printf 语句设为此 printf("\n");
  • char *Constants[] = { '\n', '\t', '\v', '\b', '\r', '\f', '\\', '\'', '\"', '\0' }; 是一个错误,不应编译。如果您在这里没有得到任何东西,请打开您的编译器警告。
  • “卡住”是因为您没有将Binary 重置为零以进行下一次循环迭代。它保留了它的旧值。解决此问题的一种方法是在Binary[i] = 1; } 之后添加else Binary[i] = 0;

标签: c arrays loops for-loop


【解决方案1】:

您的变量 i 在较大的 for 循环中,而其他 i 在较小的循环中被混淆了!!

改变,使用不同的变量

编辑: 正如大卫在下面的评论中提到的那样:您还应该在使用完 Binary 后重新初始化它们:

for ( j = 0; j < 8; j++){

        printf("%d", Binary[j]);
        Binary[j] = 0;
    }

【讨论】:

  • 另外,你想在循环内初始化binary,而不是在循环外。否则,您永远不会将任何条目设置为零。
  • 修复了它(以及添加的额外评论)谢谢!
  • 他对i 的使用在所有地方都是正确的。同意这很令人困惑,但是当他需要外部 i 时,他从不使用内部 i
  • 我意识到,原来的答案本身并没有改变任何输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 2019-12-25
相关资源
最近更新 更多