初次來本論壇,本人最近在自學譚浩強的C語言程式設計,在最后一章的檔案操作部分一直想自己實操一下,于是仿著課本的例子大概寫了段向檔案寫入資料的程式,但是一直寫入失敗,我找了好久,奈何才疏學淺實在找不出問題在哪,下面是代碼:
#include<stdio.h>
#include<stdlib.h>
#define N 2
struct Student_type
{
int num;
char name[10];
int age;
char addr[25];
};
struct Student_type stud[N];
int main()
{
FILE* fp;
int i;
if((fp=fopen("C:\\Users\\ASUS\\Documents\\C-Free\\practice\\file1.dat","wb")==NULL))
{
printf("Can not open this file!\n");
exit(0);
}
printf("Please enter the student data.The format is:\nNo.\t|Name\t|Age\t|Address\t\n");
for(i=0;i<N;i++)
{
scanf("%d%s%d%s",&stud[i].num,stud[i].name,&stud[i].age,stud[i].addr);
if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1)
{
printf("File write error!\n");
}
}
fclose(fp);
return 0;
}
程式運行時的程序:

并且編譯的時候會出現warning: assignment makes pointer from integer without a cast警告
uj5u.com熱心網友回復:
write函式中的引數好好看一下uj5u.com熱心網友回復:
實在不好意思,能再說清楚點嗎,fwrite()四個引數,第一個是一個指標,最后一個是FILE*型的指標,中間兩個應該沒問題,我感覺型別都對上了啊,實在不知道了...uj5u.com熱心網友回復:
我貼一張格式清楚點的圖
uj5u.com熱心網友回復:
你的fopen括號用錯了吧,還要就是fwrite你寫入二進制,你打開檔案是不好看里面資料的,會有亂碼uj5u.com熱心網友回復:
fopen那里,因為你括號用錯了,==優先級高于=,所以先判斷fopen==null 此時不等于,所以回傳false賦給fp指標也就是fp=0,所以下面寫入fp不成功uj5u.com熱心網友回復:
看你寫了兩個括號,應該是有考慮到優先級問題,但是寫錯了
uj5u.com熱心網友回復:
#include<stdio.h>
#include<stdlib.h>
#define N 2
struct Student_type
{
int num;
char name[10];
int age;
char addr[25];
};
struct Student_type stud[N];
int main()
{
FILE* fp;
int i;
//if((fp=fopen("C:\\Users\\ASUS\\Documents\\C-Free\\practice\\file1.dat","wb")==NULL))
if((fp=fopen("C:\\Users\\ASUS\\Documents\\C-Free\\practice\\file1.dat","wb"))==NULL)
{
printf("Can not open this file!\n");
exit(0);
}
printf("Please enter the student data.The format is:\nNo.\t|Name\t|Age\t|Address\t\n");
for(i=0;i<N;i++)
{
scanf("%d%s%d%s",&stud[i].num,stud[i].name,&stud[i].age,stud[i].addr);
if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1)
{
printf("File write error!\n");
}
}
fclose(fp);
return 0;
}
供參考~
uj5u.com熱心網友回復:
fwrite函式的回傳值是寫入的位元組數轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/94457.html
標籤:C語言
上一篇:常量存盤問題
下一篇:這是喂什么泥?
