2017-01-25 25 views
0

任務是 做一個程序,從文本文件中讀取和寫入其他的文本文件 只在命令行參數給出 例如符號:
方案AZ in.txt out.txt
將寫入文件out.txt只有在az範圍內的字母沒有更多。
程序a-9 in.txt out.txt
只會寫入文件out.txt中只有在-z0​​-9範圍內的字母。
可以假定所有輸入的數據都是正確的。命令行以參數並將其放置於正則表達式statments

所以這裏是我的嘗試:

int main(int argc, char** argv) 
{ 
    FILE *fileIn, *fileOut; 
    fileIn = fopen(argv[2] , "rb"); 
    fileOut = fopen(argv[3] , "wb"); 
    char *arguments = argv[1]; 

    printf("%d - %d\n", arguments[0], arguments[2]); 
    char a; 
    do 
    { 
     a = fgetc(fileIn); 
     if(a > arguments[0] && a < arguments[2]) 
      fputc(a, fileOut); 
    } while (a != EOF); 

    fclose(fileIn); 
    fclose(fileOut); 
    return 0; 
} 

我的第一個想法是採取指定參數和使用它們作爲ASCII限制器
它在某種程度上適用於AZ但與其他它不到風度
的問題是:
我該如何改進?
我應該改變做法嗎?

回答

0

我會修改你的if語句類似如下:

if(arguments[2] >= '0' && arguments[2] <= '9') { 
    if((a >= arguments[0] && a <= arguments[0]) || (a >= '0' && a <= arguments[2])) 
    { 
     fputc(a, fileout); 
    } 
} 
else if(arguments[2] >= 'a' && arguments[2] <= 'z' && arguments[0] >= 'a' && arguments[0] <= 'z') { 
    if(a >= arguments[0] && a <= arguments[2]) { 
     fputc(a, fileout); 
    } 
} 
+0

這是我無法想出,工作就像一個魅力謝謝! – noissue

0

如果你給a-9作爲參數,該程序將無法正常工作,因爲數字字母的ASCII碼值('0''9')均大於小寫羅馬字母('a''z')小。

例如,'0'的值爲0x30('1'爲0x31等等),'a'爲0x61('b'爲0x62等等),所以if語句的條件爲(a >= 'a' && a <= '9')根本不會被執行。

而且當您測試的字符等於argument[0]argument[2]時,您的if語句的條件表達式將評估爲0。你可能想改變它。