注册 登录
编程论坛 C语言论坛

为什么输出一堆乱码 求助

新手一只 发布于 2019-07-26 11:26, 1640 次点击

#include <stdio.h>
#include <stdlib.h>

int main()
{   
    int i;
    int z[4];
        char w[4];
    int x[4];
    for(i = 0;i < 4; i++){
        scanf("%c",&w[i]);
        x[i]=(w[i]-64);

        switch(x[i]){
        case 1:
          z[i] = 8;
          break;
        case 2:
          z[i] = 8;
          break;
        case 3:
          z[i] = 12;
          break;
        case 4:
          z[i] = 2;
          break;
        case 5:
          z[i] = 2;
          break;
        case 6:
          z[i] = 3;
          break;
        case 7:
          z[i] = 14;
         break;
        case 8:
          z[i] = 15;
          break;
        case 9:
          z[i] = 6;
          break;
        case 10:
          z[i] = 14;
          break;
        case 11:
          z[i] = 14;
          break;
        case 12:
          z[i] = 13;
          break;
        case 13:
          z[i] = 1;
          break;
        case 14:
          z[i] = 19;
          break;
        case 15:
          z[i] = 16;
          break;
        case 16:
          z[i] = 19;
          break;
        case 17:
          z[i] = 3;
          break;
        case 18:
          z[i] = 1;
          break;
        case 19:
          z[i] = 11;
          break;
        case 20:
          z[i] = 3;
          break;
        case 21:
          z[i] = 19;
          break;
        case 22:
          z[i] = 20;
          break;
        case 23:
          z[i] = 22;
          break;
        case 24:
          z[i] = 3;
          break;
        case 25:
          z[i] = 13;
          break;
        case 26:
          z[i] = 6;
          break;
    }
        }      
    printf("%d\t",z[1]);
    printf("%d\t",z[2]);
    printf("%d\t",z[3]);
    printf("%d\t",z[4]);
        system("pause");
        return 0;
}
输出结果只有第二个正常 怎么办
6 回复
#2
rjsp2019-07-26 13:06
你总得告诉别人你输入什么吗?
然后期待输出什么,怎么算是“正常”?
#3
wufuzhang2019-07-26 15:24
回复 楼主
你代码有2个问题:
1、数组元素下标,int z[4];的四个元素是z[0]、z[1]、z[2]、z[3]
2、scanf("%c",&w[i]);只获取一个字符,对于回车符('\n')仍然存在于缓存中,你没有清空缓存,导致下一次scanf得到的是回车符

修改方法:
在scanf("%c",&w[i]);的后面加上两句
  char getBuff;
  while (getBuff = getchar() != '\n' && getBuff != EOF);

就可以了
#4
新手一只2019-07-26 16:48
回复 3楼 wufuzhang
谢 大佬
可是我无论输入什么第四个数值总是29
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#5
rjsp2019-07-26 17:07
程序代码:
#include <stdio.h>

int main( void )
{
    char w[4];
    for( size_t i=0; i!=4; ++i )
    {
        if( scanf(" %c",w+i)!=1 || w[i]<'A' || w[i]>'Z' )
            return 1;
    }

    const int buf[] = { 8,8,12,2,2,3,14,15,6,14,14,13,1,19,16,19,3,1,11,3,19,20,22,3,13,6 };
    printf( "%d\t%d\t%d\t%d\n", buf[w[0]-'A'], buf[w[1]-'A'], buf[w[2]-'A'], buf[w[3]-'A'] );
    return 0;
}
#6
wufuzhang2019-07-26 17:21
r神的代码很精炼,楼主可以拷回去慢慢体会。

至于你第四个元素总是29,我这边没法查,你把.c或者.cpp文件上载一下,看看
#7
新手一只2019-07-26 17:24
回复 5楼 rjsp
WOW 谢大佬
1