作業要求一
最簡單的wordcount
具體要求:http://www.cnblogs.com/xinz/p/7426280.html
1.設計思路:
0.0版本設計思路:
第一步:讀入用戶想要操作的文件名
第二步:找到並打開文件
第三步:if語句匹配相關功能
第四步:實現相關功能並返回結果
第五步:關閉文件
1.0版本設計思路
對0.0版本的優化,如果輸入不相關的字符程序提示
2.主要代碼
0.0版本的相關代碼
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char name[20];//用來存需要操作的文件的文件名
char function[2];//用來匹配對相關文件需要進行的操作
int charNum=0,wordNum=0,lineNum=0;//分別用來統計字符數、詞數和行數
//讀入文件名
printf("請輸入需要進行操作文件的文件名:");
scanf("%s",&name);
//定義文件指針
FILE *fp;
//打開文件
if(( fp = fopen( name, "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//讀入想要對文件進行的相關操作
printf("請輸入需要對文件進行的相關操作\n -c統計文件中的字符數\n -w統計文件中的詞數\n -l統計文件的行數\n");
scanf("%s",&function);
//匹配讀入的功能並操作文件
//統計文件字符數
if((function[0]=='-')&&(function[1]=='c')){
char ch;
ch = fgetc(fp);//fgetc(文件名)函數從指定文件中讀取一個字符EOF用來檢測是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
charNum--;
printf("文件中的字符數為:%d",charNum);
}
//統計文件詞數
if((function[0]=='-')&&(function[1]=='w')){
char ch;
while(feof(fp)==0){
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("文件中的詞數為:%d",wordNum);
}
//統計文件行數
if((function[0]=='-')&&(function[1]=='l')){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
printf("文件中的行數為:%d",wordNum);
}
//關閉文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
return 0;
}
3.遇到的相關問題及解決方式
錯誤分析:第一次寫的時候function是一個字符串,在使用if匹配的時候為報多字符常數常數異常
解決方法:將function寫成一個字符數組分別比對兩個字符是否匹配
1.0版本主要代碼
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char name[20];//用來存需要操作的文件的文件名
char function[2];//用來匹配對相關文件需要進行的操作
int charNum=0,wordNum=0,lineNum=0;//分別用來統計字符數、詞數和行數
//讀入文件名
printf("請輸入需要進行操作文件的文件名:");
scanf("%s",&name);
//定義文件指針
FILE *fp;
//打開文件
if((fp = fopen( name, "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//讀入想要對文件進行的相關操作
printf("請輸入需要對文件進行的相關操作\n -c統計文件中的字符數\n -w統計文件中的詞數\n -l統計文件的行數\n");
scanf("%s",&function);
//匹配讀入的功能並操作文件
//統計文件字符數
if((function[0]=='-')&&(function[1]=='c')){
char ch;
ch = fgetc(fp);//fgetc(文件名)函數從指定文件中讀取一個字符EOF用來檢測是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
printf("文件中的字符數為:%d",charNum);
}
//統計文件詞數
else if((function[0]=='-')&&(function[1]=='w')){
char ch;
while(feof(fp)==0){
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("文件中的詞數為:%d",wordNum);
}
//統計文件行數
else if((function[0]=='-')&&(function[1]=='l')){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
wordNum++;
printf("文件中的行數為:%d",wordNum);
}
else{
printf("輸入錯誤!沒有對應功能\n 請關閉窗口重新運行程序。");
}
//關閉文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
return 0;
}
2.0版本:加入argc argv[]
操作過程中出現的錯誤:字符集編碼問題
解決辦法:將所有提示字符串全部換成英文
代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
//如果用命令行操作,默認第一個參數為要操作的文件名argv[1],第二個參數是匹配的操作argv[2]
if(argc==1){
char name[20];//用來存需要操作的文件的文件名
char function[2];//用來匹配對相關文件需要進行的操作
int charNum=0,wordNum=0,lineNum=0;//分別用來統計字符數、詞數和行數
//讀入文件名
printf("Please enter the file name that needs to be done:");
scanf("%s",&name);
//定義文件指針
FILE *fp;
//打開文件
if((fp = fopen( name, "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//讀入想要對文件進行的相關操作
printf("Please enter the relevant operation that needs to be done to the file:\n -c The number of characters in a statistical file.\n -w The number of words in a statistical document.\n -l The number of rows in a statistical file.\n");
scanf("%s",&function);
//匹配讀入的功能並操作文件
//統計文件字符數
if((function[0]=='-')&&(function[1]=='c')){
char ch;
ch = fgetc(fp);//fgetc(文件名)函數從指定文件中讀取一個字符EOF用來檢測是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
printf("The number of characters in the file is:%d",charNum);
}
//統計文件詞數
else if((function[0]=='-')&&(function[1]=='w')){
char ch;
while(feof(fp)==0){
ch=fgetc(fp);
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("The number of words in the document is:%d",wordNum);
}
//統計文件行數
else if((function[0]=='-')&&(function[1]=='l')){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
wordNum++;
printf("The number of rows in the file is:%d",wordNum);
}
else{
printf("Input error!There is no corresponding function\n Please close the window and rerun the program.");
}
//關閉文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
}
else if(argc==2){
char function[2];//用來匹配對相關文件需要進行的操作
int charNum=0,wordNum=0,lineNum=0;//分別用來統計字符數、詞數和行數
//定義文件指針
FILE *fp;
//打開文件
if((fp = fopen( argv[1], "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//讀入想要對文件進行的相關操作
printf("Please enter the relevant operation that needs to be done to the file:\n -c The number of characters in a statistical file.\n -w The number of words in a statistical document.\n -l The number of rows in a statistical file.\n");
scanf("%s",&function);
//匹配讀入的功能並操作文件
//統計文件字符數
if((function[0]=='-')&&(function[1]=='c')){
char ch;
ch = fgetc(fp);//fgetc(文件名)函數從指定文件中讀取一個字符EOF用來檢測是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
printf("The number of characters in the file is:%d",charNum);
}
//統計文件詞數
else if((function[0]=='-')&&(function[1]=='w')){
char ch;
while(feof(fp)==0){
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("The number of words in the document is:%d",wordNum);
}
//統計文件行數
else if((function[0]=='-')&&(function[1]=='l')){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
wordNum++;
printf("The number of rows in the file is:%d",wordNum);
}
else{
printf("Input error!There is no corresponding function\n Please close the window and rerun the program.");
}
//關閉文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
}
else if(argc==3){
int charNum=0,wordNum=0,lineNum=0;//分別用來統計字符數、詞數和行數
//定義文件指針
FILE *fp;
//打開文件
if((fp = fopen( argv[1], "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//統計文件字符數
if(!strcmp(argv[2],"-c")){
char ch;
ch = fgetc(fp);//fgetc(文件名)函數從指定文件中讀取一個字符EOF用來檢測是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
printf("The number of characters in the file is:%d",charNum);
}
//統計文件詞數
else if(!strcmp(argv[2],"-w")){
char ch;
while(feof(fp)==0){
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("The number of words in the document is:%d",wordNum);
}
//統計文件行數
else if(!strcmp(argv[2],"-l")){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
wordNum++;
printf("The number of rows in the file is:%d",wordNum);
}
//關閉文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
}
return 0;
}
在命令行中的操作截圖:
學習進度總結:
1.我的Github地址:https://github.com/XINJY/The-homework-of-C
上傳成功截圖:今天總是上傳失敗,可能是網絡問題,待上傳成功之后回來補截圖
emmmm看來不是網的原因翻牆之后依然傳不上,哪天成功了一定回來補圖
終於上傳成功了,說好的回來補圖
2.點評的同學
袁中:http://www.cnblogs.com/2719610441qqcom/p/8992324.html
李伍壹:http://www.cnblogs.com/chenxidream/p/8992880.html
姜健:http://www.cnblogs.com/jj990519/p/8992796.html
申怡苗:http://www.cnblogs.com/Vinecy/p/8992802.html
3.圖表和折線圖
最后一次作業是查着各種資料一邊寫着敲着代碼一邊寫着博客到底用了多長時間我自己都不知道
博客字數太多單獨做了折線圖
4、本學期課程即將結束,請總結下你本課程的收獲,回顧第0次作業,你是否實現了你的目標?
本課程的收獲:專業知識層面的就不一一列舉了,說說博客作業吧,還記得課程剛開始的時候,那個時候的我還不知道什么是博客作業,更不知道該怎么寫所謂的博客作業。現在我可以流暢的寫下自己的解題思路,嫻熟的使用ProcessOn畫出合格的流程圖,學會了簡單的使用那個從前只在別人口中聽說過的Github,能夠熟練的使用Markdown的簡單語法對自己的博客進行排版,能特別認真的去追究一個報錯的錯誤到底出現在哪里到底該如何去描述這個錯誤到底該如何去改正這個錯誤,這些都是寫博客作業帶來的收獲。
第0次作業:http://www.cnblogs.com/X-JY/p/8516188.html
再次回顧第0次作業仿佛那個斗志昂揚的自己就在昨天,不知不覺9個周已經過去了,這可能是我最后一次上C語言課,但我的C語言學習歷程絕對不會就此打住。
好了回到正題,下面開始回顧我的第0次作業目標的實現情況:理想總是比現實豐滿很多,那所謂的書籍並根本就沒有翻開,那所謂的鍛煉項目根本就沒有去找,雖然逼着自己認真學習但還是會有上課走神的時候。總的來說,當時的目標也實現了也沒有實現,我相信在未來的日子里我會做的更好,我永遠都欠着這個世界一個更優秀的自己。
5、你對目前的上課和作業方式(上課講解+PTA+博客)有何意見和建議?
6、終於我們即將不再是師生。當你結束本課程,你和我就站在同樣的位置上,我將不再基於學校授權和知識、經驗 (年齡?)上的優勢而對你的自由有任何干擾。除發布成績以外,我最后一次行使教師特權: 請問你有什么要對教師 (我)說的,建議、抱怨、希望……多謝。
為了避免建議上的重復我將5和6放在了一起(當然更多的是因為我懶),首先一個學期下來特別感謝老師的辛勤付出,我知道每次作業我們寫一份非常費時間,老師評論批改七十多份也很費時間。但是在這最后的時刻,我還是想抱怨一句“博客作業真的很難寫!!!”。建議老師在下次教授跟我們同樣類型的同學時先了解一下相關的情況,我們的課和各種活動真的很多(雖然這些都不能作為我們不寫作業的理由)我們的精力畢竟有限,想用有限的精力及時高質量的完成所有的任務有時真的很困難。有些時候我也有些厭煩我們現在的形式,明明我寫一道題目十幾分鍾就能完成,但是我要用半個多小時甚至一個小時來寫這道題的博客,往往我們每次上完課后留下的作業題目還並不是一道題目,我認為作業不求量多但求精細,比如我們可以每次上完課之后只要求大家認真精細的摳一道題目,從一道中學習鞏固知識,其他的題目可以作為選做題不做硬性的要求,認為自己做的不夠好的還可以利用選做題來鞏固和學習。抱怨歸抱怨最后還是要對我們的牛老師表示由衷的感謝。