2012-12-07 71 views
1

我目前正試圖讓我的程序按我想要的方式工作。我目前正處於可以從命令行(無限量)打開任何文本文件並顯示它們的位置。我想對此進行擴展,讓用戶輸入格式化顯示文本的短語。我以前發佈過類似的問題,我已經得到了一些很好的答案,但我不能使用getopt()。除此之外,還有什麼可以掃描命令行中的「-w」和數字,所以「-w5」和沒有數字的「-s」。這是我希望能夠檢測到的唯一兩件事。我不介意是否有聲明,我希望在我的朋友中使用最短的程序,但在這一點上,我只想完成它。有任何想法嗎?多個if語句是我朋友的想法,我個人認爲這是不需要的,但如果這就是我必須做的......如果任何人有任何想法,這將是非常有用的。我只想讓我的程序從命令行檢測這兩個字符。我對C相當陌生(我只做了幾個程序),但是我很早就學會了,我嘗試過使用Google,並嘗試使用它,但對C來說是新手,試圖找到我需要的東西所有其他的文字和行話都很困難。如何從命令行掃描短語?

任何東西都會有用,謝謝。

#include <stdio.h> 
#include <stdlib.h> 


int main(int argc, char **argv) 
{ 

int l = 1; 
    while(l != argc) 
{ 
     FILE *fp; 


    fp = fopen(argv[l], "rb"); 
    l++; 

if (fp != NULL) 
{ 
    int i = 1; 
    do 
    { 
     i = fgetc(fp); 
     printf("%c",i); 
     printf(" "); 
    } 
    while(i!=-1); 
    fclose(fp); 
} 
else 
{ 
    printf("Error.\n"); 

} 
    } 
} 
void scanningForWS(int argc, char **argv) 
{ 





} 
+0

爲什麼你不使用'getopt的()'? – duskwuff

+0

因爲他在Windows上?用戶ID不同,但討論的選項與[我是否正確理解'getopt()']相同?](http://stackoverflow.com/questions/13767888/am-i-understanding-getopt-correctly )。 –

+0

做一個Google(或您選擇的其他搜索引擎)搜索'getopt source at&t public domain'。你會發現一個版本的getopt()的源代碼,該版本在1985年被AT&T放置在公共領域。你需要將它轉換爲標準C(它不使用原型),否則,你應該很好走。 –

回答

1

你應該看看Plan9的ARGBEGIN和ARGEND宏在其libc.h文件(在文件的最後),看看它是如何做(其使用的一個例子,見arg(3))。這個機制的實現是非常好的(我已經重新實現了它的一個版本,即使在找到不正確的標誌後,它也能解析參數,但它不會在任何地方發佈。我可以發佈如果你需要的話)。

0

命令行參數在argv中,而且由於argv是一個數組,所以在它內部找到一個特定元素的唯一方法是迭代,檢查每個元素,直到找到所需的元素。如果你不想自己編寫所有這些,看起來像C在search.h中有一個名爲'lfind'的方法來實現這一點。 Here is an example如何使用它。希望有所幫助:3。

此外,GNU documentation