标题:为什么输出一堆乱码 求助
只看楼主
新手一只
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-7-26
结帖率:0
已结贴  问题点数:20 回复次数:6 
为什么输出一堆乱码 求助

#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;
}
输出结果只有第二个正常 怎么办
搜索更多相关主题的帖子: 输出 int case break printf 
2019-07-26 11:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
你总得告诉别人你输入什么吗?
然后期待输出什么,怎么算是“正常”?
2019-07-26 13:06
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
得分:10 
回复 楼主
你代码有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);

就可以了

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2019-07-26 15:24
新手一只
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-7-26
得分:0 
回复 3楼 wufuzhang
谢 大佬
可是我无论输入什么第四个数值总是29
2019-07-26 16:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#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;
}
2019-07-26 17:07
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
得分:0 
r神的代码很精炼,楼主可以拷回去慢慢体会。

至于你第四个元素总是29,我这边没法查,你把.c或者.cpp文件上载一下,看看

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2019-07-26 17:21
新手一只
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-7-26
得分:0 
回复 5楼 rjsp
WOW 谢大佬
2019-07-26 17:24



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




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

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