Week 12
檔案讀寫
Week 12-1.1
Step 1:先開啟CodeBlock並開啟Empty file,並將此程式檔案儲存
Step 2:將下列程式碼複製進CodeBlock中
程式碼:
#include<stdio.h>
int main()
{
FILE * fout=fopen("file.txt","w");
printf("Hello World");
fprintf(fout,"Hello World在檔案裡\n");
}
程式碼解釋:
FILE *fout=fopen("file.txt","w");
此段為 設一個指標(*fout),此指標的型態為FILE(檔案),因此fout為【檔案指標】
此指標會被初始化為:
(1)fopen:開啟一個檔案 (f為file檔案的意思)
(2)fopen()此函式的格式為:fopen("檔名","模式")
檔名:如果此檔案存在於當前目錄則會開啟此檔,若不存在則會創建一個新的檔案
模式:開啟此檔的模式
(3)fprintf():此函式格視為:fprintf(被寫入的檔案變數,"欲寫入的資料")
Week 12-1.2
Step 1:開啟New Empty File,並將檔案儲存
Step 2:將下列程式碼複製進並貼上
程式碼:
#include<stdio.h>
int main()
{
char line[20];
FILE *fin = fopen("file.txt","r");
fscanf(fin,"%s",line);
printf("讀到了:%s\n",line);
fscanf(fin,"%s",line);
printf("讀到了:%s\n",line);
}
程式碼解釋:
fscnaf()函式格式為:fscanf(要被讀取的檔案變數,"資料型態",要存入的變數)
fscanf()會將檔案讀取到的資料,讀入此程式中,以便程式加以利用
Week 12-1.3
Step 1:將下列程式碼複製進New Empty File
程式碼:
#include<stdio.h>
int main()
{
int a[10]={10,20,30,40,50,60,70,80,90,100};
FILE * fout=fopen("file3.txt","w");
for(int i=0;i<10;i++)
{
fprintf(fout,"%d ",a[i]); //切記:一定要打"%d "空格一定要加,不然儲存的資料會連再一起
printf("%d ",a[i]);
}
fclose(fout);
int b[10];
FILE *fin=fopen("file3.txt","r");
for(int i=0;i<10;i++)
{
fscanf(fin,"%d",&b[i]);///讀到b陣列b[i]裡面
printf("%d ",b[i]);
}
fclose(fin);
}
程式碼解釋:
fclose()函式格式為:fclose(檔案變數)
fclose()會關閉檔案變數開啟的檔案,關閉後便不可再存取該變數
fscanf(fin,"%d",&b[i])此行為:fscanf()先以fin檔案變數存取檔案,將讀到的整數資料(%d)存入b[i]的位置中
fopen()的模式參數:
fopen()有6種參數:"r"、"w"、"a"、"+"、"b"、"t"
r:以【唯讀】的模式打開,且該檔案必須存在
w:將文件以【唯寫】的模式打開,若該檔案存在則長度會被清0(刪去先前所寫的內容),若該文件不存在則會創建一個新的
a:以追加的方式開啟該檔案,若檔案不存在則會創建一個新的;如果檔案存在,則被寫入的數據會追加至原本檔案的最後,即:文件內容會被保留
r+:以可讀寫的方式開啟檔案,該檔案必須存在
w+:打開可讀寫檔案,若該檔案存在則長度清0(刪去原先的內容),若該文件不存在則會創建一個新的
a+:以附加的方式開啟該檔案,若檔案不存在則會建立該檔案;若檔案存在則會保留原本的檔案內容,新寫入的內容會被自動追加至該檔案的最後
rb:【唯讀】的模式打開一個二進位的檔案,只允許讀資料
wb:【唯寫】的模式打開一個二進位的檔案,只允許寫入資料
ab:追加打開一個二進位文件,並在檔案末尾處寫入資料
rb+:讀寫模式打開一個二進位的檔案,雲許讀寫資料,檔案必須存在
wb+:讀寫模式打開或建立一個二進位的檔案,允許讀和寫
ab+:讀寫打開一個二進位檔案,允許讀或式在檔案末端增加數據
rt:【唯讀模式】打開一個txt檔案,只允許讀取資料
wt:【唯寫模式】打開或建立一個txt檔案,只允許寫入資料
at:追加打開一個txt檔案,並在檔案末端寫入資料
rt+:讀寫模式打開一個txt檔案,允許讀寫
wt+:讀寫模式打開或建立一個txt檔案,允許讀寫
at+:讀寫模式打開一個txt檔案,允許讀或是在檔案末端增加數據
總結:
b為:打開方式是否為二進位
讀寫模式分為下列數種:唯讀、唯寫、讀寫、追加只寫(a)、追加讀寫(a+)
+表示:允許讀寫
a表示:追加寫入(寫在檔案最末端)
t:以文件檔(txt檔)開啟一個檔案
Week 12-2.1
Step 1:開啟CodeBlock並開啟GLUT project
Step 2:將下列程式碼複製並貼上CodeBlock
程式碼:
#include<stdio.h>
#include<GL/glut.h>
float teapotX=0,teapotY=0;
FILE *fout=NULL;
FILE *fin=NULL;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(teapotX,teapotY,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
teapotX=(x-150)/150;
teapotY=(150-y)/150;
if(state==GLUT_DOWN)
{
if(fout==NULL)fout=fopen("file4.txt","w");
fprintf(fout,"%f %f\n",teapotX,teapotY);
}
display();
}
void keyboard(unsigned char key,int x,int y)
{
if(fin==NULL){
fclose(fout);
fin = fopen("file.txt","r");
}
fscanf(fin,"%f%f",&teapotX,&teapotY);
display();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week12");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
Week 12-2.2
Step 1:開啟CodeBlock並開啟GLUT project
Step 2:將下列程式碼複製並貼上
#include <stdio.h>
#include <GL/glut.h>
float teapotX=0,teapotY=0;
FILE * fout =NULL;
FILE * fin =NULL;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(teapotX,teapotY,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
teapotX=(x-150)/150.0;
teapotY=(150-y)/150.0;
if(state==GLUT_DOWN){
if(fout==NULL)
fout=fopen("file4.txt","w");
fprintf(fout,"%f %f\n",teapotX,teapotY);
}
display();
}
void keyboard(unsigned char key,int x,int y)
{
if(fin==NULL){
fclose(fout);
fin=fopen("file4.txt","r");
}
fscanf(fin,"%f%f",&teapotX,&teapotY);
display();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week12");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMainLoop();
}
上述加底線的程式碼為:從Week12-2.1複製過來的程式碼中新增的部分,此部分讓file4.txt可以記錄移動到的點
file4.txt在freeglut/bin中
Step 1:點選選單的Project-Properites...
Step 2:點選Build target
Step 3:將Execution working dir改為欲設定的執行目錄即可
PS:若只輸入個".",則會將working dir設為【目前的目錄】
freeglut.dll在freeglut/bin目錄中
Week 12-3
Step 1:創建一個GLUT project
Step 2:把上一個程式碼複製進去
Step 3:把資料夾名稱改成:Final_project
Step 4:打開CodeBlock,並對Final_project點開右鍵,並點選Properties...
或是上面的Project-Properties...也可
沒有留言:
張貼留言