c语言char输出乱码

Posted

tags:

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

#include<stdio.h>#include<string.h>void process(char s[],char s1[]) int i; for(i=0;s[i]!='\0';i++) if(s[i]>='a'&&s[i]<='w') s1[i]=s[i]-32+3; else if(s[i]>='x'&&s[i]<='z') s1[i]=s[i]-32-23; else if(s[i]>='A'&&s[i]<='W') s1[i]=s[i]+3; else if(s[i]>='X'&&s[i]<='Z') s1[i]=s[i]-23; main() char s[7]="prZzbpP"; char c[7]; process(s,c); printf("%s\n",c);

你几个地方写错了,我在里面有注释,分别有:
1、赋值地方,应该是a[i][j],这里i、j代表第几个,你用student这些固定值,一看就知道错了不是吗?而且这是个非常严重的错误,a[i][j]这里面i不能等于student,j不能等于subiects,你们下标取值0到student-1,你自己写完看看都知道错了
2、sum每次循环前要赋0,否则会把前一个学生的成绩加进去
3、ave=sum*1.0/4,不乘1.0的话,系统会把sum/4当成一个整型,会造成结果不正确
#include
#define subiects 3 //学科数量
#define students 4 //学生人数
int main(void)

int a[students][subiects] = 53,54,76,87,89,56,76,85,45,75,76,45 ;
int i = 0, j = 0, sum = 0;//sum为总分
double ave;//ave为平均值
//输入成绩

for (i = 0; i < students; i++)

printf("请输入学生%d的%d科成绩:", i + 1, subiects);//i+1为学生序号
for (j = 0; j < subiects; j++)

scanf("%d", &a[i][j]);//students=4,subiects=3,你觉得a[4][3]赋值是赋给谁?下面同样错误


//输出成绩
printf("\t\tC语言\t大英\t高数\t总分\t平均分\n");
for (i = 0; i < students; i++)

sum=0;//每次都要赋0,否则会把前面同学成绩加进去
printf("\t同学%d", i+1);
for (j = 0; j < subiects; j++)

sum += a[i][j];//错误
printf("\t%d", a[i][j]);//错误

ave = sum*1.0 / subiects;
printf("\t%d\t%.2f\n",sum,ave);

printf("\n\n");
//颠倒输出
sum = 0;
ave = 0;
printf("\t");
for (i = 0; i < students; i++)
printf("\t同学%d", i + 1);
printf("\t平均分\n");
for (j = 0; j < subiects; j++)

if (j == 0)
printf("\tC语言");
if (j == 1)
printf("\t大英");
if (j == 2)
printf("\t高数");

sum=0;//赋0
for (i = 0; i < students; i++)

sum += a[i][j];//错误
printf("\t%d", a[i][j]);//错误

ave = sum*1.0 / students;
printf("\t%.2f\n",ave);

return 0;
参考技术A 输出乱码是必须的,因为你的数据类型搞错了,你使用的是字符函数stringcopy()来拷贝字符;那么要处理的数据当是char类型,然而你所定义的指针应当也是char类型;你应当修改的地方是 int *str1,*str2;//请将int改为char追问

仔细看问题老哥

c语言读取文件数据乱码

#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
struct Student_type
int num;
char name[10];
int math;
int english;
int computer;
stud[10];
int main()
int i;
FILE*fp;
if((fp=fopen("C:\\kk\\kk.txt","rb"))==NULL)
printf("cannot open file\n");
exit(0);

for(i=0;i<SIZE;i++)
fread(&stud[i],sizeof(struct Student_type),1,fp);
printf("%d%s%d%d%d\n",stud[i].num,stud[i].name,stud[i].math,stud[i].english,stud[i].computer);

fclose(fp);
return 0;

参考代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()

FILE *fp;
char ch;
if ((fp=fopen("o.txt","wr+"))==0) //据所知=没有"wr+"的表达,如果是读取数据的话改成if((fp = ("o.txt","r"))==NULL)就可以了
exit(0);
while(!feof(fp))
ch=fgetc(fp);
printf("%c",&ch); //改成printf("%c",ch),加上取地址符就变成读取ch的内存值了

return 0;
参考技术A 给你一个你参考下就行了

#include<iostream>
using namespace std;
void creat()//创建文件并且输入信息

int tel;
char name[20],add[20];
//char name[10];
FILE *fp;
cout<<"请输入要创建的文件的名称\\n";
cin>>name;
if((fp=fopen(name,"a+"))==NULL)

cout<<"cannot open this file\\n";
exit(0);

fprintf(fp,"%-10s%-20s%-50s\\n","姓名","电话号码","住址");
cout<<"请依次输入姓名、电话号码、住址(以0结束)\\n";
cin>>name;
while(strcmp(name,"0"))

cin>>tel>>add;
fprintf(fp,"%-10s%-20d%-50s\\n",name,tel,add);
cin>>name;

fclose(fp);

void output()//输出文件的内容

FILE *fp;
char tel[20];
char name[20],add[20];
cout<<"请输入要输出的文件的名称\\n";
cin>>name;
if((fp=fopen(name,"r"))==NULL)

cout<<"cannot open this file\\n";
exit(0);

cout<<"\\t通讯录\\n";
while(!feof(fp))

fscanf(fp,"%s%s%s\\n",name,tel,add);////一定要是%s 格式
printf("%-10s%-20s%-50s\\n",name,tel,add);

fclose(fp);



int main()

char a[20]="12";
int b= atoi(a);;//吧字符串变成数字
cout<<b;
creat();
output();
return 0;

/////或者更简单的/////////////////////////////////
///一个程序
#include<iostream>
using namespace std;
void output()//输出文件的内容

FILE *fp;
char buff[50];
char name[20];
cout<<"请输入要输出的文件的名称\\n";
cin>>name;
if((fp=fopen(name,"r"))==NULL)

cout<<"cannot open this file\\n";
exit(0);


while(!feof(fp))

fgets(buff,50,fp);
puts(buff);

fclose(fp);



int main()



output();
return 0;

参考技术B 把打开方式改为 "r"以及把读取信息用fscanf吧,因为如果你是原先先把kk.txt写好,然后再用你的程序打开它的话,由于里面有换行符以及空格等内容,除非开始你是用fwrite函数写入的结构信息,否则fread会把这些都作为信息读取的(也就是说它读到一个struct Student_type大小的数据就结束,而不管这里面到底存放的是什么,这个过程中读到的可能不是一个完整的结构的数据),所以就会出现你所说的乱码。追问

但这样一改后,文件就出现一个错误,怎么办

本回答被提问者采纳

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

C语言字符串输出乱码

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

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

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

求1988年国际C语言乱码大赛获奖程序分析,作者是Ian Phillipps

c语言问题,输出结果是乱码