c语言 输出char类型 乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 输出char类型 乱码相关的知识,希望对你有一定的参考价值。

int num;
char grade;
scanf("%d",&num);
switch(num)

case 9:
grade='A';
break;
default:
grade='b';
break;

printf("%c",&grade);
输入:9
输出:ん

输出应该是 printf("%c",grade);

你可以看一下C语言中的标准输入输出函数的参数要求!!!
参考技术A printf("%c",&grade);
不需要&号,你还是复习下C语言的标准输入输出函数标准!不然这样的错会经常犯。C的编译器很少有智能提示,不想C#,语法,单词上的拼写错误需要自己多注意点!
参考技术B printf输出的时候没有&吧 参考技术C 把你的printf语句中的取址符号(&)去掉再看看

C 语言-----字符串和输入输出函数

  在C语言中,没有字符串类型,那它是怎么表示字符串呢? 由于字符串是一系列单个字符的组合,所以它用char 类型的数组来表示字符串,在数组中,一个数组元素存放一个char类型字符。

char name[40];

  name 变量就可以存放字符串了,并且最多只能存储40个字符。那我们怎么给变量name赋值呢,最简单的办法,就是用字符串常量。字符串常量的写法和我们平时的写法还是一样的,用双引号括起来,如“Zing went the strings of my heart”;  字符串常量写好后,就可以像下面一样进行赋值

name=”Zing went the strings of my heart”; 

  赋值成功后,它在内存中的表示形式如下:

  

  你可能已经注意到数组末尾位置有一个字符\\0, 它是空字符,表示字符串的结束。C语言中,字符串一定以空字符结束,这意味着声明数组的容量必须比它要存储的字符串的长度多1;在这里,str字符串的长度是40, 我们只能存储39个字符, 剩下一位留给空字符。

  strlen() 函数则是获取到字符串的长度,strlen(str) 结果为33, 它包含在string.h 头文件中,所以使用这个方法之前,要先引进这个头文件 #include<string.h>

#include <stdio.h>
#include <string.h>  // 引进头文件string.h

int main()
{
    char str[40] = "Zing went the strings of my heart";
    printf("%u", strlen(str));        // 调用strlen 获取字符串的长度
    return 0;
}

  顺便说一下常量的定义:

  1,使用预处理器定义常量。在程序的头部#define PI 3.1415  在编译时,程序中的所有常量PI,都会被替换成3.1415. 这一过程也称之为编译时替换。

  2,const 也可以用来声明常量,const  double PI = 3.1415; 

#include <stdio.h>
#define PI  3.1415     // 定义常量

int main()
{
    const int r = 5;
    printf("%f %d", PI, r);
    return 0;
}

  Printf()函数: 打印字符串,它的格式如下:

  Printf(格式化字符串,待打印的参数1,待打印的参数2,.....待打印的参数n), 看一下下面这段打印代码,

printf(“The %d person ate %f berry pies. \\n”, number, pies);

  格式化字符串就是双引号括起来的内容,为什么叫格式化字符串,因为它里面有%d, %f, 这样的转换说明,就是后面要打印的项,以什么格式进行输出。%d表示以整数时行输出,%f 以浮点数进行输出。

  还有其它几个常用的格式说明,

  %e或 %E,以e记数法来表示浮点数

  %s        字符串

  %%        打印一个百分号

  %c:       单个字符

  这样我们在使用printf 的时候,就比较清楚了,我们要打印多少项,就要把它们在格式化字符串后面依次列出,同时在格式化字符串中匹配对应的格式说明,这里一定要注意,格式字符串中的转换说明的个数一定要和待打印项的个数一致,它们一一匹配。当然,如果只是打印字符串,就直接写要打印的字符串就好了,就不用转换说明了。Printf(“Hello World”)

   转换说明修饰符: 就是在% 和d 之前可以加说明,表示对待打印项进一步的修饰。如%.2f 就是表示小数点后面保留两位小数。 %5d表示整数的宽度为5,但是如果指定的字宽小于原有数的字宽,字段宽度会自动增加。

#include <stdio.h>
#define PI  3.1415     // 定义常量

int main()
{
    const int r = 5;
    int num = 100;
    // PI小数点后面成了2位,r占了5个字宽,num 虽然设了两个字宽,但这还是占3个
    printf("%.2f %5d %2d", PI, r, num);
    return 0;
}

  打印较长的字符,printf()可以接受多个字符串,编译的时候,会自动它拉连接到一起,如 printf(“this is a ”   “best person”)

  Scanf()读取输入的内容

  当我们使用键盘进行输入的时候,输入的永远是字符,比如我们输入2018, 我们实际上是依次输入4个字符2,0,1,8, 所以我们要告诉scanf,他表示的是数字,所以还是用到了格式说明。scanf()的第一个参数,格式转换说明,后面则是读取的值要存入的变量。格式转换说明,和printf()函数一致

scanf(“%d %d”, &num1, &num2);  //一定要注意变量前面的&符号,变量存储的是基本数据类型时,读取的时候,前面一定要加&

  当用键盘输入多个数值时,中间用空格隔开,空格前面的就会赋给第一个参数,空格后面就会赋值给第二个参数。但这里要注意字符串的读取,scanf() 函数读取我们输入的字符串时,在遇到第1个空白(空格、制表符,换行符)时,就不会再读取输入。 scanf 去读取 angela palains 时,它只会读取 angela.   

以上是关于c语言 输出char类型 乱码的主要内容,如果未能解决你的问题,请参考以下文章

c语言char输出乱码

C语言 字符串输出时最后出现乱码

我写了一个C语言程序。但输出结果为一串乱码。不知道是哪里错误了

C语言文件问题:为啥下面程序会有乱码输出?

c语言如果用字符串类型输出字符数组,字符数组最后一个是0,那么为啥会出现乱码

C语言输出格式和类型