本文目錄一覽:
- 1、C語言問題,為什麼輸出總是亂碼
- 2、為什麼C語言輸出文件內容亂碼
- 3、c語言輸出字符串為什麼是亂碼?
- 4、c語言的這個C程序 為什麼輸出的是亂碼?
- 5、C語言各科成績輸出亂碼是為什麼,前面的計算函數都運行正常的,,,
C語言問題,為什麼輸出總是亂碼
看一眼就知道。。亂碼是因為你的指針沒有賦NULL,是野指針,指向了不明區域,所以會出現亂碼,以後定義指針最好int
*a
=
NULL;這樣子
為什麼C語言輸出文件內容亂碼
這種文本文件,不能直接使用讀到結構的方法。因為結構里會有非文本的控制符,比如字符串結束符’\0’。
一般使用直接讀到結構的方法,只限於二進制格式的文件,並且最好是讀自己創建的文件,別人創建的,格式剛剛好合適創建結構的也很少。
你這個亂碼,你的文件里,學號長度為10個位元組,所以你定義學號這個變量時,必須定義11個位元組的長度,因為字符串的變量,必須要有一個’\0’作為結束,不然的話,顯示的時候,沒有結束符就會接着往下顯示,就會有亂碼出現。
如果僅僅是這三行的話,倒也能使用結構來讀,比如結構里定義num[11],讀完後執行一下num[10] = ‘\0’;給它補一個結束符。但如果有人叫「王老四」,名字有的是2個字,有的是3個字這樣,你這個就不好判斷了。
這種文本,最好是使用fscanf(“%s %s %s %s %s”, num, name, sex, date, major)的形式來讀取。每次讀取一行。(注意字符串定義變量時,長度一定要多加1位)。
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;
}
c語言的這個C程序 為什麼輸出的是亂碼?
主要錯誤有三個,第一:後面所有的a[students][subiects]變成a[i][j]
在計算每個同學的總分和平均分的時候要將sum的初值設置為0吧
在計算平均分的時候,你的語句是ave = sum / students;ave = sum / subiects
這個是不對的,應改為,ave =1.0* sum / students,ave =1.0* sum / subiects原因在於 假設sum=7,students=3,則ave=7/3=2,而實際想要的結果為2.3333
#includestdio.h
#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]);
}
}
//輸出成績
printf(“\t\tC語言\t大英\t高數\t總分\t平均分\n”);
for (i = 0; i students; i++)
{ sum=0;
printf(“\t同學%d”, i+1);
for (j = 0; j subiects; j++)
{
sum += a[i][j];
printf(“\t%d”, a[i][j]);
}
ave = 1.0*sum / 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;
for (i = 0; i students; i++)
{
sum += a[i][j];
printf(“\t%d”, a[i][j]);
}
ave = 1.0*sum / students;
printf(“\t%.2f\n”,ave);
}
return 0;
}
C語言各科成績輸出亂碼是為什麼,前面的計算函數都運行正常的,,,
void output(struct student stu[], int m, int n)
{
int i, j;
printf(“**名次****學號****姓名****總分********各科成績*********”);
for (i = 0; im; i++)
{
stu[i].p = i + 1;
printf(“\n%3d %8d %6s %4d “, stu[i].p, stu[i].num, stu[i].name, stu[i].total);
for (j = 0; jn; j++)
{
printf(“%3d”, stu[i].score[j]); // 只能有一個%3d
}
printf(“\n”);
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/309228.html