奇怪的getchar()问题,和赋值错误问题!(缓冲区刷新)

#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数组会输出错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值