c - C 中的函数和循环问题

标签 c arrays loops

这个程序要求用户输入一个7位数字(1和0除外),每个数字都有对应的一组字母 (2=ABC、3=DEF、4=GHI、5=JKL、6=MNO、7=PRS、8=TUV、9=XYZ,如美国手机上所示)。最后,它应该输出所有 2187 个可能的字母序列。

例如:输入 2345678 输出应该是 ADGJMPT ADGJMPU ADGJMPV ADGJMRT ADGJMRU ADGJMRV ADGJMST.........CFILOSV

但我的输出总是 AAAAAAA AAAAAAB AAAAAAC.........CCCCCCC

(我在校验数字时也遇到了麻烦。我先设置了一个循环和数组,if (che[1] != 1 && che[0] != 1) break; 但有时它不会破裂。)

你能解释一下哪里出了问题吗?

#include<stdio.h>

int main(){
    int che[50] = { 0 };

    int a, b, c, d, e, f, g, i, r, q, number, check;

    char word2[7];

    char word1[8][3] = {
            { 'A', 'B', 'C' },
            { 'D', 'E', 'F' },
            { 'G', 'H', 'I' },
            { 'J', 'K', 'L' },
            { 'M', 'N', 'O' },
            { 'P', 'R', 'S' },
            { 'T', 'U', 'V' },
            { 'W', 'X', 'Y' } };


    while (1)
    {
        printf("Enter seven digit(except 0 and 1):");
        scanf("%d", &number);

        check = number;
        for (; number != 0; number /= 10)
        {
            q = number % 10;
            che[q] = 1;
        }
        if (che[1] != 1 && che[0] != 1) break;
    }
    number = check;

    for (i = 6; number == 0; i--)
    {
        r = number % 10;
        if (r == 2){ word2[i] = 0; }
        if (r == 3){ word2[i] = 1; }
        if (r == 4){ word2[i] = 2; }
        if (r == 5){ word2[i] = 3; }
        if (r == 6){ word2[i] = 4; }
        if (r == 7){ word2[i] = 5; }
        if (r == 8){ word2[i] = 6; }
        if (r == 9){ word2[i] = 7; }
        number /= 10;
    }

    for (a = 0; a < 3; a++){

        for (b = 0; b < 3; b++){

            for (c = 0; c < 3; c++){

                for (d = 0; d < 3; d++){

                    for (e = 0; e < 3; e++){

                        for (f = 0; f < 3; f++){

                            for (g = 0; g < 3; g++){
                                printf("%c%c%c%c%c%c%c ",word1[word2[0]][a], word1[word2[1]][b], word1[word2[2]][c], word1[word2[3]][d], word1[word2[4]][e], word1[word2[5]][f], word1[word2[6]][g]);
                            }
                        }
                    }
                }
            }
        }
    }

    return 0;
}

最佳答案

主要问题在这里:

for (i = 6; number == 0; i--)

循环条件与应有的相反。您希望继续迭代该数字,直到达到 0(通过连续将其除以 10)。

应该是

for (i = 6; number != 0; i--)

for (i = 6; i >= 0; i--)

另外请注意

    if (r == 2){ word2[i] = 0; }
    if (r == 3){ word2[i] = 1; }
    if (r == 4){ word2[i] = 2; }
    if (r == 5){ word2[i] = 3; }
    if (r == 6){ word2[i] = 4; }
    if (r == 7){ word2[i] = 5; }
    if (r == 8){ word2[i] = 6; }
    if (r == 9){ word2[i] = 7; }

相当于

 if (r >= 2 && r <= 9)
   word2[i] = r - 2;

关于c - C 中的函数和循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26827587/

相关文章:

c++ - 如何使用 C 或 C++ 获取目录中的文件列表?

c - 带 C 代码的 4 位 LCD

python - 查找最大值的递归函数返回 0

.net - 在 VB.NET 中关联两个文本字符串的最佳方法

c++ - 静态 const 变量的 getter 来初始化二维数组

java - 在java中使用嵌套循环解决消除问题?

javascript - imacros javascript多个for循环内循环过程提取数据

c++ - 在 Qt-Projekt 中加载 libavcodec

c - 如何通过终端编译C文件

Ruby 嵌套循环