标题:奇怪的getchar()问题,和赋值错误问题!
只看楼主
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
结帖率:100%
已结贴  问题点数:20 回复次数:11 
奇怪的getchar()问题,和赋值错误问题!
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

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() ) );
    strcpy( second,cpy ( getchar() ) );
    strcpy( third,cpy ( getchar() ) );
    strcpy( fourth,cpy ( getchar() ) );
    strcpy( fifth,cpy ( getchar() ) );
    strcpy( sixth,cpy ( getchar( ) ) );
    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++)
                                        {
                                            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数组会输出错误。


[ 本帖最后由 oszc 于 2011-6-6 14:59 编辑 ]
搜索更多相关主题的帖子: character 
2011-06-06 14:55
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
得分:0 
最简单的就是穷举法。
2011-06-06 15:03
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
楼主,你的代码没啥大问题,你在 cpy(getchar()); 这前面加个 return 应该就没事了。
而且,你的 switch 里面完全不需要 break 了,都已经 return 了么。
还有,为啥不用二维数组?

[ 本帖最后由 voidx 于 2011-6-6 15:30 编辑 ]
2011-06-06 15:28
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
得分:0 
default 中 加上return 还是错误
2011-06-06 15:48
墨香555
Rank: 2
等 级:论坛游民
帖 子:115
专家分:31
注 册:2010-10-21
得分:0 
我也遇见过类似问题
2011-06-06 16:10
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:20 
你用的啥编译器?GCC没问题
2011-06-06 16:16
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
得分:0 
我用vs2010 换gcc也有问题,是不是因为我系统是64位的缘故

GCC输出:
燚GJMRU
燚GJMRV
燚GJMST
燚GJMSU
燚GJMSV
燚GJNPT
燚GJNPU
燚GJNPV
燚GJNRT
燚GJNRU
……
……

VS2010输出:
A孏JMPT
A孏JMPU
A孏JMPV
A孏JMRT
A孏JMRU
A孏JMRV
A孏JMST
A孏JMSU
A孏JMSV
A孏JNPT
A孏JNPU
A孏JNPV
A孏JNRT
A孏JNRU
A孏JNRV
A孏JNST
A孏JNSU
A孏JNSV
A孏JOPT
A孏JOPU
A孏JOPV
……
……

[ 本帖最后由 oszc 于 2011-6-6 16:30 编辑 ]
2011-06-06 16:27
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
你用记事本打开是这样的?这不是你程序的问题,你试试在 cmd 里 edit data.txt
2011-06-06 16:30
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
估计是输入一次忘了吧回车getchar掉了  自己再仔细找找

                                         
===========深入<----------------->浅出============
2011-06-06 16:35
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
得分:0 
应该不会,出错是在输入 2 3 4 5 6 7 8这个顺序 ,如果我输入 2 4 5 6 7 8 9 就没任何问题,3无论出现在哪个位置,就出错。这个问题估计可以叫被诅咒的小3

[ 本帖最后由 oszc 于 2011-6-6 16:39 编辑 ]
2011-06-06 16:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-342029-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.914967 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved