重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
FILE *fp;
fp = fopen("test.txt", "r"); //以讀的形式打開文本文件
if (fp == NULL)
{exit(0);
}
文本文件
r 只讀 r+ 讀寫
w 只寫 w+ 讀寫
a+ 讀寫尾部添加
二進制文件
rb 只讀 rb+ 讀寫
wb 只寫 wb+ 讀寫
ab 尾部添加 ab+ 讀寫尾部添加
fclose(fp);
char ch;
//寫 - fputc()
ch = getchar();
while ( ch != '$' )
{fputc(ch,fp); //把ch變量的字符值寫往文件
ch = getchar();
}
//讀 -fgetc()
ch = fgetc(fp); //從文件里讀取一個字符
while ( ch != EOF ) //判斷文件是否讀完,未完,則繼續執行讀操作
{putchar(ch); //將字符送到屏幕
ch = fgetc(fp);
}
putchar(10); //換行
//讀 - fgets()
char ch[41], *cp;
cp = fgets(ch, 41, fp); //從文件中讀取一行字符串,不得超過40字節(還有一個字節是'\0')
while ( cp != NULL )
{printf("%s", ch);
cp = fgets(ch, 40, fp);
}
//寫 - fputs()
char ch[5][41], *cp;
int i;
for ( i = 0; i< 0; i++ )
{gets(ch[i]); //將一個字符串放到數組中
}
for ( i = 0; i< 5; i++ )
{fputs(ch[i], fp); //將一個字符串寫往文件
fputs("\n", fp); //在文本文件中換行
}
fscanf() 把從文本文件中讀出的字符串按指定的格式轉換為相應類型變量的值(不只是字符型)
fprintf() 把變量的值按指定的方式轉化為文本寫往文本文件
fscanf(文本指針,格式控制字符串,輸入項的地址列表);
其返回值是事實上已賦值的變量的個數,如果未進行分配,則返回EOF
fprintf(文本指針,格式控制字符串,輸入項的列表);
其返回值是正確寫入文件的字節數,否則返回負數
int main(void)
{char name[9];
FILE *fp;
int age, i, num=0;
float score;
fp = fopen("student.txt", "w"); //以寫的形式打開文件
if ( fp == NULL )
exit(0);
for ( i = 0; i< 3; i++ )
{printf("請輸入學生_%d的姓名,年齡,成績:", i+1);
scanf("%s%d%f", name, &age, &score);
fprintf(fp, "%s %4d %6.2f\n", name, age, score); //將變量數據寫往文件
}
fclose(fp);
fp = fopen("student.txt", "r"); //以讀的形式打開文件
printf("從文件中讀出的學生數據:\n");
i = fscanf(fp, "%s%d%f", name, &age, &score); //利用scanf的返回值來判斷讀是否成功
while ( i == 3 )
{printf("學生_%d的姓名,年齡,成績:", ++num);
printf("%s %4d %6.2f\n", name, age, score); //將數據打印到屏幕上
i = fscanf(fp, "%s%d%f", name, &age, &score);
}
fclose(fp);
return 0;
}
數據塊讀寫文件在讀寫過程中不對數據進行轉換,直接在內存與文件之間進行數據拷貝;
讀寫過程中不需考慮數據的性質和類型,只是簡單對存儲空間進行復制
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:對應一個連續內存數據區的起始地址,通常是一個指針值
size:欲復制的一個數據塊的大小(字節數)
count:本次欲復制多少個數據塊
fp:指向讀寫文件的文件指針
int feof(FILE *fp)
用于在進行讀文件時,檢測是否讀寫文件所有數據,如果文件結束,則返回非0值,反之返回0
while (!feof(fp)) {}
int main(void)
{FILE *fp1, *fp2;
char data;
fp1 = fopen("stu.txt", "rb");
fp2 = fopen("stu_copy.txt", "wb");
if ( fp1 == NULL || fp2 == NULL )
exit(0);
fread(&data, sizeof(char), 1, fp1); //讀一個字節的內容給變量data
while ( !feof(fp1) )
{fwrite(&data, sizeof(char), 1, fp2); //將data的內容寫到fp2
fread(&data, sizeof(char), 1, fp1);
}
fclose(fp1);
fclose(fp2);
return 0;
}
fseek(),可以將文件位置指針移動到指定的位置
int fseek(FILE *fp,long 位移量, int 起始點);
起始點參數:0 文件開始位置; 1 文件當前位置; 2 文件末尾位置
位移量: 值為正時,指針向后移動;值為負時,指針向前移動;若是long型,則100L
rewind(FILE *fp) 是使文件的文件位置指針重新指向文件開始的位置
fflush(stdin); 清空輸入緩存區,保證下面的scanf()讀新的循環條件
ftell(FILE *fp) 用于獲取文件位置指針當前值
ferror(FILE *fp) 用于測試給定文件指針指向的文件信息區的錯誤標識符
cleareer(FILE *fp) 使文件錯誤標志和文件結束標志置為0
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧