这个程序要求用户输入一个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/