c存储中文乱码
❶ c语言出现乱码
有两个问题:
一、变量a是float型,用%d输入输出会出错,可以考虑把变量d定义成int型;
二、姓名是字符串,不是字符,可以考虑用字符数组来存储。
修改如下:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
inta;
floatb,c;
chard[10];
printf("请输入你的姓名: ");
gets(d);
printf("请输入你的年龄: ");
scanf("%d",&a);
printf("请输入你的身高m: ");
scanf("%f",&b);
printf("请输入你的体重kg: ");
scanf("%f",&c);//以下代码测试输入的正确性
printf("姓名:%s ",d);
printf("年龄:%d ",a);
printf("身高:%.2fm ",b);
printf("体重:%.2fkg ",c);
return0;
}
❷ c语言出现乱码
有两个问题:
一、变量a是float型,用%d输入输出会出错,可以考虑把变量d定义成int型;
二、姓名是字符串,不是字符,可以考虑用字符数组来存储。
修改如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
float b,c;
char d[10];
printf("请输入你的姓名:\n");
gets(d);
printf("请输入你的年龄:\n");
scanf("%d",&a);
printf("请输入你的身高m:\n");
scanf("%f",&b);
printf("请输入你的体重kg:\n");
scanf("%f",&c); //以下代码测试输入的正确性
printf("姓名:%s\n",d);
printf("年龄:%d\n",a);
printf("身高:%.2fm\n",b);
printf("体重:%.2fkg\n",c);
return 0;
}
❸ C语言控制台程序,中文输出变成乱码,怎么解决
这里涉及到一个字符在源代码(文本)中,编译好的二进制文件中,以及最后控制台输出编码形式的区别.
首先,要明确一点:C(语言/程序)并不理解ANSI,UTF-8以及任何其他编码.它只知道处理你给它的字符的二进制表示.
在简体中文Windows下,默认的文本保存编码是ANSI(即GBK);Linux下根据系统locale设定,一般应该是(zh_CN.UTF-8).(以下基于简体中文Windows)
1)对于源文件中保存的"中文"这个字符串,VS2008看到的就是"0xd6d0"和"0xcec4"的形式(默认ANSI编码得到).但编译器才不管是不是GBK神马的,它就管那串数字.
区别,MinGW看到的是"0xe4b8ad"和"0xe69687"(gcc默认UTF-8).注意,用MinGW编译的源文件中有中文宽字符必须保存为UTF-8编码.
2)然后,在二进制文件中的存储形式,对传统的字符串(char str[] = "中文";),编译器什么都不做,直接把那串数字(如"0xd6d0","0xcec4")搬过去塞进二进制文件.
但对于宽字符串(wchar_t wstr[] = L"中文";),编译器会将其做转换,转换成Unicode编码格式(在Windows是UTF-16,而Linux下是UTF-32).如"中文"的16位Unicode是"0x4e2d"和"0x6587",然后把这串转换后的数字("0x4e2d","0x6587")塞进二进制文件中.(这里VS和MinGW做的没有区别)
这里有点需要注意,编译器必须知道你的源文件保存的编码!如VS默认是ANSI编码,如果你用UTF-8保存.c源文件去用VS打开看一定是乱码.同理如果你用mingw编译ANSI编码保存的源文件,也会出错!(但可以修改编译选项解决,见文章末尾) 在本文这里这个原因其实很好理解,因为编译器需要知道,如果它要将一个保存在文件中的字符转成宽字符时,是从什么编码转到Unicode.(可见上述VS是GBK->Unicode,而MinGW是UTF-8->Unicode)
❹ C语言运行的时候汉字全部乱码怎么回事
1、汉字乱码是因为缓冲区有字符,需要用fflush(stdin);来清空键盘缓冲区,
使用getch等都是治标不治本的办法,可以多学习一下fflush的使用,对于大批量的手动输入,很用。
2、例程:
#include"stdio.h"
#include"stdlib.h"
#include<conio.h>
main()
{
charx;
while(1)
{
printf("请输入一个小写字母:");
fflush(stdin);//清空键盘缓冲区
x=getchar();
printf("大写字母为: ");putchar(x-32);
}
}