全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1203
推到 Plurk!
推到 Facebook!

[VC++問題]程式碼衝突到了

尚未結案
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-28 15:29:52 IP:218.162.xxx.xxx 未訂閱
這是我自己寫的刪空白和刪註解程式    我把它統合在一起 "程式個別是沒有問題的"    所以不用去理會 問題是在於 當我輸入1或是2(3目前還沒有功能)    程式因該會問我要做哪一個檔(使用者自行輸入)    然後再去做使用者要的功能 complier沒問題實際執行 就不行了    不知問題出在哪裡 後面的2支程式我個別做了記號 單獨是沒有問題的    我想問題應該是出在前面的邏輯
 
#include
#include
int main(void)
{
        char word[999999];
         char filename[80];
        int count=0;
        int num;
        int i,j,final,start;
    
    printf("請選擇功能\n");
        printf("1.刪除空白  2.刪除註解  3.讀取設定檔:");
        scanf("%d",&num);        printf("Please input file name:");
    gets(filename);
    FILE* fp=fopen(filename, "r");
        while(!feof(fp))
        {
                fscanf(fp,"%c",&word[count]);
                count  ;
        }    if(num==1)//刪空白
{
////////////////////////////////////////
  for(i=0;i    我也要收哈囉kitty^^
        
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-28 16:34:45 IP:61.140.xxx.xxx 未訂閱
Miki-lion 妳好:    我將妳的程式稍做調整後,以 BCB 編譯過後可以正常運作 (我沒有 VC++),以紅色標示者為調整過的地方,妳試試看使用 VC++ 編譯後是否也可正常運作?
#include
#include
int main(void)
{
    FILE* fp;  // 宣告改到此處
    char word[999999];
    char filename[80];
    int count=0;
    int num;
    int i,j,final,start;        printf("請選擇功能\n");
    printf("1.刪除空白  2.刪除註解  3.讀取設定檔:");
    scanf("%d",&num);
    fflush(stdin);  // <- 插入這行
    printf("Please input file name:");
    gets(filename);    //    FILE* fp=fopen(filename, "r");
    fp=fopen(filename, "r");  // 將宣告與使用分開
    while(!feof(fp)){
        fscanf(fp,"%c",&word[count]);
        count  ;
    }        if(num==1){  //刪空白
////////////////////////////////////////
        for(i=0;ifor(int j=i 2;j
                for(j=i 2;j
發表人 - RedSnow 於 2005/05/28 16:42:15
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-28 17:34:16 IP:218.162.xxx.xxx 未訂閱
fflush(stdin);是甚麼意思呢? 我知道這是更新資料流但是為何要用呢? stdin我就查不到了 還有我的刪多行註解好像有bug在 晚點才來改好了..>< 感謝你每次都幫我^^ 我也要收哈囉kitty^^
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-28 19:28:50 IP:61.140.xxx.xxx 未訂閱
Miki-lion 妳好:    呵呵~不用客氣啦,我也是在邊學邊幫忙的,我看到一些問題是我會的,那我就會直接回覆 (不過有時也會抓錯重點而出槌....),否則我就看問題是不是我有興趣的?有興趣的話,我也會去做些測試,看能不能找出問題來?然後試著提供一點意見,我回覆妳這篇問題就屬於後者,因為測試妳的程式時,發生了幾個錯誤,我依據錯誤訊息,查看 Help 相關說明後,試著修改程式讓它能跑,在這個過程中,我也學到 (雖然我用不著) fflush(stdin) 可以解決使用多個 scanf() 時所產生的錯誤,以及原因的所在,以下就是我現在的瞭解,妳也參考一下吧: scanf 在讀取資料時要等到 eof - end of field (讀取檔案時的 end-of-file 或是 end-of-string) 或是發生錯誤時才會完成動作。 當妳按下 Enter 鍵時會送出一個換行符號,告訴系統要完成 scanf() 的動作,但是妳若未主動清除掉那個換行符號的話,它是會停留在 stdin (標準輸入裝置) 的緩衝區裡面的,因此在進行下一個 scanf() 時,就會產生錯誤了,fflush(stdin) 就是將 stdin 的緩衝區清除乾淨,以避免進行下一個 scanf() 動作時會產生錯誤。
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-28 23:58:19 IP:218.162.xxx.xxx 未訂閱
在刪註解的部份有分多行的/**/ 單行的//     原本的程式是分成這2部分的 可以選擇要做哪一部份 分開並沒有問題    想不到放在一起做就會有問題 一時也想不出來解決方法    實在想不通為何前面無法刪除 後面卻可以 先PO出來說一下 我陷在還在弄呢><    例如處理下面的文字  
 dhghdrhdrh
/*654654656*/          -----無法刪除
//4654646              -----無法刪除
/*
//11111111111111111111111122222 -----可以刪除
2222222222222333333333333444444
445555666666
/*45646546----可以
88可以------可以
87*/--------可以
我也要收哈囉kitty^^
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-29 13:39:03 IP:218.19.xxx.xxx 未訂閱
Miki-lion 妳好:    我覺得程式處理的本身沒有什麼大問題,但是在流程上好像有必要做些許的調整,因此我更改了部分程式敘述的順序,並加上一些設定,剛才以我的環境配合妳貼上來的那些測試資料做了測試後,結果應該是可以達到要求的,修改後的程式碼如下:
#include
#include
int main(void)
{
    FILE* fp;  // 宣告改到此處
    char word[999999];
    char filename[80];
    int count=0;
    int num;
    int i,j,final,start;        printf("請選擇功能\n");
    printf("1.刪除空白  2.刪除註解  3.讀取設定檔:");
    scanf("%d",&num);
    fflush(stdin);  // <- 插入這行
    printf("Please input file name:");
    gets(filename);        fp=fopen(filename, "r");  // 將宣告與使用分開
    while(!feof(fp)){
        fscanf(fp,"%c",&word[count]);
        count  ;
    }        if(num==1){  //刪空白
////////////////////////////////////////
        for(i=0;i
        start = -1;  // <- 新增
        final = -1;
        for(i=0;i
//        for(i=start;i  // 本段搬家
//            word[i]='|';//用|來取代註解裡的字
//        }
        for(i=0;i
//      for(i=start;i  // 本段搬家
//          word[i]='!';//用|取代
//      }    /////////////////////////////////////////////////////////
        for(i=0;i
妳再測試一下,看看在妳的環境中是否也 OK? 發表人 - RedSnow 於 2005/05/29 13:41:01
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-29 22:47:19 IP:218.162.xxx.xxx 未訂閱
程式我執行了 多型註解的部份是沒有功能的 程式我還在看 今天我有重寫一個起來 不過依然還是有問題 之前說沒有問題應該是沒去注意到BUG 處理下面這些字元時,多型註解就不行了 我再來寫看看 好累人喔 //111111111111111111111111111111111111111 /*222222222222222222222222222222222222222 333333333333333333333333333333333333333 444444444444444444444444444444444444444 555555555555555555555555555555555555555 666666666666666666666666666666666666666*/ 777777777777777777777777777777777777777 //0000000000000000000000000000000000000// /*8888888888888888888888888888888888888*/ 我也要收哈囉kitty^^
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-30 00:01:39 IP:218.19.xxx.xxx 未訂閱
Miki-lion 妳好:    抱歉又擺烏龍了,前一篇為了強調某些位置的變動,因此在貼到版面上之前,在程式碼裡面插入顏色標籤來作標示,因為一時的偷懶,部分資料是用複製的,不小心多複製了一段,以致整個程式的輸出變了個樣子,這次我不用顏色作標示了,直接將剛剛執行過的程式貼上來,妳再試試看:
#include
#include
int main(void)
{
    FILE* fp;  // 宣告改到此處
    char word[999999];
    char filename[80];
    int count=0;
    int num;
    int i,j,final,start;        printf("請選擇功能\n");
    printf("1.刪除空白  2.刪除註解  3.讀取設定檔:");
    scanf("%d",&num);
    fflush(stdin);  // <- 插入這行
    printf("Please input file name:");
    gets(filename);        fp=fopen(filename, "r");  // 將宣告與使用分開
    while(!feof(fp)){
        fscanf(fp,"%c",&word[count]);
        count  ;
    }        if(num==1){  //刪空白
        for(i=0;i
發表人 - RedSnow 於 2005/05/30 00:02:42
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-30 00:12:36 IP:218.162.xxx.xxx 未訂閱
嗯嗯~~謝謝你~~明天等我全看會了~~再來給你打分數喔^^ 還有~~字元是'字元'而不是"字元"~~扣5分了喔~呵呵 剛編譯錯一堆 害我嚇一跳呢>< 還剩下4隻kitty^^
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-30 09:19:15 IP:218.19.xxx.xxx 未訂閱
要扣分啊?呵呵~那妳還是不要來打分數好了....。    咦~妳說的是啥 "字元" 啊?我修改與新增的部份好像都沒有用到什麼雙引號的地方耶。
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-05-30 10:18:27 IP:218.162.xxx.xxx 未訂閱
ex:if(word[i]==' ' && word[i 1]==' '){ 字元要用' '夾住才可以吧 因為我以前學的時候就是這樣了 我不知道為何你用雙引號可以耶("") 還剩下4隻kitty^^
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-05-30 11:51:56 IP:218.19.xxx.xxx 未訂閱
我沒有改到那個部分耶,整個程式有用到雙引號的地方僅有下列這幾處:

printf("請選擇功能\n"); printf("1.刪除空白 2.刪除註解 3.讀取設定檔:"); scanf("%d",&num); printf("Please input file name:"); fp=fopen(filename, "r"); // 將宣告與使用分開 fscanf(fp,"%c",&word[count]); printf("%c",word[i]); printf("\n"); printf("%c",word[i]); printf("\n");

妳講的那些敘述用的都是單引號啊:

if(word[i]==' ' && word[i 1]==' '){ word[i]='!'; if(word[i]!='!') if(word[i]=='/' && word[i 1]=='/'){ word[j]='|'; if(word[i]=='/' && word[i 1]=='*'){ if(word[j]=='*' && word[j 1]=='/'){ word[j]='!'; if(word[i]!='|'&& word[i]!='!'){

那ㄟ安咧....,難道有幽魂躲在本版?
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-05-30 19:21:14 IP:218.162.xxx.xxx 未訂閱
我複製過去C 後會變成雙引號....真是神奇 目前先做這樣就好了~謝謝你喔~~ 我還有一個Maya動畫專題..頭痛 還剩下4隻kitty^^
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-05-30 19:53:45 IP:218.19.xxx.xxx 未訂閱
別客氣,祝妳專題順利完成。
系統時間:2024-11-23 8:43:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!