#include
#include
#include
const char *cpy(char character);
int main (void)
{
char first[4]={0};
char second[4]={0};
char third[4]={0};
char fourth[4]={0};
char fifth[4]={0};
char sixth[4]={0};
char seventh[4]={0};
int i,j,k,l,m,n,o;
FILE *fPtr;
fPtr=fopen("data.txt","w");
printf("Enter numbers:/n ?");
strcpy( first,cpy ( getchar() ) );
printf("? ");
while ( (c=getchar() )!= '/n' && c != EOF); //解答问题一:同样需要刷新标准输入缓冲区,否则直接接受缓冲区字符!
strcpy( second,cpy ( getchar() ) );
printf("? ");
while ( (c=getchar() )!= '/n' && c != EOF); //解答问题一:同样需要刷新标准输入缓冲区,否则直接接受缓冲区字符!
strcpy( third,cpy ( getchar() ) );
printf("? ");
while ( (c=getchar() )!= '/n' && c != EOF); //解答问题一:同样需要刷新标准输入缓冲区,否则直接接受缓冲区字符!
strcpy( fourth,cpy ( getchar() ) );
printf("? ");
while ( (c=getchar() )!= '/n' && c != EOF); //解答问题一:同样需要刷新标准输入缓冲区,否则直接接受缓冲区字符!
strcpy( fifth,cpy ( getchar() ) );
printf("? ");
while ( (c=getchar() )!= '/n' && c != EOF); //解答问题一:同样需要刷新标准输入缓冲区,否则直接接受缓冲区字符!
strcpy( sixth,cpy ( getchar( ) ) );
printf("? ");
while ( (c=getchar() )!= '/n' && c != EOF); //解答问题一:同样需要刷新标准输入缓冲区,否则直接接受缓冲区字符!
strcpy( seventh,cpy ( getchar( ) ) );
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
for (k=0;k<3;k++)
{
for (l=0;l<3;l++)
{
for (m=0;m<3;m++)
{
for (n=0;n<3;n++)
{
for (o=0;o<3;o++)
{
fflush(stdout) //解答问题二:这里必须刷新输出缓冲区,否则显示会出现乱码!!!!
fprintf(fPtr,"%c",first[i]);
fprintf(fPtr,"%c",second[j]);
fprintf(fPtr,"%c",third[k]);
fprintf(fPtr,"%c",fourth[l]);
fprintf(fPtr,"%c",fifth[m]);
fprintf(fPtr,"%c",sixth[n]);
fprintf(fPtr,"%c/n",seventh[o]);
// printf( "%c",first[i]);
// printf( "%c",second[j]);
// printf( "%c",third[k]);
// printf( "%c",fourth[l]);
// printf( "%c",fifth[m]);
// printf( "%c",sixth[n]);
// printf( "%c/n",seventh[o]);
}
}
}
}
}
}
}
fclose(fPtr);
return 0;
}
const char *cpy(char charactor)
{
const char two[]="ABC";
const char three[]="DEF";
const char four[]="GHI";
const char five[]="JKL";
const char six[]="MNO";
const char seven[]="PRS";
const char eight[]="TUV";
const char nine[]="WXY";
switch(charactor){
case '2':
return two;
break;
case '3':
return three;
break;
case '4':
return four;
break;
case '5':
return five;
break;
case '6':
return six;
break;
case '7':
return seven;
break;
case '8':
return eight;
break;
case '9':
return nine;
break;
// case '/n':
// case '/t':
// case ' ':
// break;
default:
printf("/nEntre a number between 2 and 9./n? ");
cpy(getchar());
break;
}
}
--------------------------------
数字 字母 数字 字母
2 ABC 6 MN0
3 DEF 7 PRS
4 GHI 8 TUV
5 JKL 9 WXY
-------------------------------
上面这段程序是输入7位数字,然后排列出7为数字代表可能的字母组合,写入data.txt中。
比如输入 23(为了简化,演示两位) 那么应该显示AD,AE,AF,BD,BE,BF,CD,CE,CF。
现在遇到:
第一个问题:getchar()运行错误,在第一个函数strcpy( first,cpy ( getchar() ) )中正确运行,首先提示输入字符。然而在后续的函数(如strcpy( second,cpy ( getchar() ) ) )中 这是cpy中的getchar()似乎并未运行,因为直接直接显示default的语句。
第二个问题:若输入 2 3 4 5 6 7 8则第二个数组(second)必定赋值错误,若输入 2 4 5 6 7 8 9 则没有这个问题。 本来以为定义错误,但是修改char three[]还是如此。如果把 char three[]定义 移动到 定义最后 册third数组会输出错误。