第13周-專案1-小玩檔案-用鍵盤輸入檔名,統計輸出類似下面的資料

kewlgrl發表於2015-06-08
問題及程式碼:

/*   
*Copyright (c)2015,煙臺大學計算機與控制工程學院   
*All rights reserved.   
*檔名稱:File.cpp   
*作    者:單昕昕   
*完成日期:2015年6月8日   
*版 本 號:v1.0   
*問題描述:用鍵盤輸入檔名,統計輸出類似下面的資料。
*程式輸入:檔案讀取。
*程式輸出:檔案中各種字元出現的次數。
*/ 
#include <iostream>
#include <cstdio>
#include <cstdlib>//為了使用exit()
#include <fstream>
using namespace std;
int main()
{
    char ch;
    int count1=0,count2=0,count3=0;//分別用來統計字元、空格、中文
    FILE *fp=NULL;
    char fname[50];//用於存放檔名
    cout<<"請輸入檔名(請注意加上檔名字尾):";
    gets(fname);
    fp=fopen(fname,"r");//只供讀取
    if(fp==NULL)//如果失敗了
    {
        cout<<"檔案開啟錯誤!";
        exit(1);//中止程式
    }
    while((ch=getc(fp))!=EOF)
    {
        putchar(ch);
        count1++;
        if(ch==' ')
            count2++;
        else if(ch>0xA0)
            count3++;
    }
    fclose(fp);//關閉檔案
    fp=NULL;//需要指向空,否則會指向原開啟檔案地址
    cout<<endl;
    cout<<"統計資訊————————————————————————"<<endl;
    cout<<"字元數(不計空格):"<<count1<<endl;
    cout<<"字元數(計空格):"<<count1+count2<<endl;
    cout<<"中文字元:"<<count3<<endl;
    return 0;
}


執行結果:


知識點總結:
中文字元是從0xA0開始的。


學習心得:

不知道為什麼中文字元出不來阿!!!!!!

I need help!!!!!!


修正後的程式碼:

/*   
*Copyright (c)2015,煙臺大學計算機與控制工程學院   
*All rights reserved.   
*檔名稱:File.cpp   
*作    者:單昕昕   
*完成日期:2015年6月8日   
*版 本 號:v2.0   
*問題描述:用鍵盤輸入檔名,統計輸出類似下面的資料。
*程式輸入:檔案讀取。
*程式輸出:檔案中各種字元出現的次數。
*/ 
#include <iostream>
#include <cstdio>
#include <cstdlib>//為了使用exit()
#include <fstream>
using namespace std;
int main()
{
    unsigned ch;
    int count1=0,count2=0,count3=0;//分別用來統計字元、空格、中文
    FILE *fp=NULL;
    char fname[50];//用於存放檔名
    cout<<"請輸入檔名(請注意加上檔名字尾):";
    gets(fname);
    fp=fopen(fname,"r");//只供讀取
    if(fp==NULL)//如果失敗了
    {
        cout<<"檔案開啟錯誤!";
        exit(1);//中止程式
    }
    while((ch=getc(fp))!=EOF)
    {
        putchar(ch);
        count1++;
        if(ch==' ')
            count2++;
        else if(ch>0xA0&&ch!=0)
            count3++;
    }
    fclose(fp);//關閉檔案
    fp=NULL;//需要指向空,否則會指向原開啟檔案地址
    cout<<endl;
    cout<<"統計資訊————————————————————————"<<endl;
    cout<<"字元數(不計空格):"<<count1<<endl;
    cout<<"字元數(計空格):"<<count1+count2<<endl;
    cout<<"中文字元:"<<count3<<endl;
    return 0;
}

執行結果:



錯誤點:

ch型別不正確。


修正程式碼:

/*
*Copyright (c)2015,煙臺大學計算機與控制工程學院
*All rights reserved.
*檔名稱:File.cpp
*作    者:單昕昕
*完成日期:2015年6月8日
*版 本 號:v3.0
*問題描述:用鍵盤輸入檔名,統計輸出類似下面的資料。
*程式輸入:檔案讀取。
*程式輸出:檔案中各種字元出現的次數。
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>//為了使用exit()
#include <fstream>
using namespace std;
int main()
{
    int ch,count1=0,count2=0,count3=0;//分別用來統計字元、空格、中文
    FILE *fp=NULL;
    char fname[50];//用於存放檔名
    cout<<"請輸入檔名(請注意加上檔名字尾):";
    gets(fname);
    fp=fopen(fname,"r");//只供讀取
    if(fp==NULL)//如果失敗了
    {
        cout<<"檔案開啟錯誤!";
        exit(1);//中止程式
    }
    while((ch=getc(fp))!=EOF)
    {
        putchar(ch);
        count1++;
        if(ch==' ')
            count2++;
        else if(ch>0xA0&&ch!=0)
            count3++;
    }
    fclose(fp);//關閉檔案
    fp=NULL;//需要指向空,否則會指向原開啟檔案地址
    cout<<endl;
    cout<<"統計資訊————————————————————————"<<endl;
    cout<<"字元數(不計空格):"<<count1<<endl;
    cout<<"字元數(計空格):"<<count1+count2<<endl;
    cout<<"中文字元:"<<count3/2<<endl;
    return 0;
}

執行結果:



錯誤原因:

一個漢字佔兩個位元組,所以要除2.


相關文章