2014-04-06 40 views
-2

你好我有一個程序,接受一些參數和打印的東西,問題該程序打印所有的參數,而不是那些需要打印。如果您能告訴我我的錯誤以及如何解決此問題,我會很高興。該程序不能正確打印數據

碼 -

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

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

for(i = 0; i < argc ; i++) 
{ 
    if("/n") 
    { 
     printf("My name is pop\n"); 
     break; 
    } 
} 

for(i = 0; i < argc ; i++) 
{ 
    if("/b") 
    { 
     printf("My birthday is 7.1.1999\n"); 
     break; 
    } 
} 

for(i = 0; i < argc ; i++) 
{ 
    if("/f") 
    { 
     printf("My favorite food is pizza\n"); 
     break; 
    } 
} 

for(i = 0; i < argc ; i++) 
{ 
    if("/?") 
    { 
     printf("/n = print name\n/b = print Birthday\n/f = Favorite Food\n"); 
     break; 
    } 
} 
} 
+3

這幾乎看起來像是在C語言中使用Perl成語的嘗試,像'「/ n」'這樣的字符串文字將會衰減爲一個將被評估爲真的指針。 –

+0

像if(「/ n」)這樣的測試是雙重誤導的。如果你正在尋找一個換行符,那是用反斜槓拼寫'「\ n」',而不是斜槓。字符串常量從不具有零地址,因此條件始終爲真,因此「then」塊中的代碼始終執行。如果你希望用戶運行:'yourprog/n',你可能正在尋找像'if(strcmp(argv [i],「/ n」)== 0)'的東西,這是一種Windows的方式編寫命令行選項。 –

回答

1

可怕的錯誤使用C語法的。 「這很糟糕,甚至沒有錯。」

if("/n") 

用這樣的方式字符串常量,檢查「結果」的計算結果爲0。測試地址的常量字符串的,哎!它不是0!所以大括號內的代碼被執行。

查看您最喜愛的參考如何比較字符串。

此外,您可能要跳過arg[0],因爲它(通常)是您程序的名稱。

1
if("/b") 
    { 
     printf("My birthday is 7.1.1999\n"); 
     break; 
    } 

C中的任何非零值都是正確的。 "/b"和其他值不爲零。所以,你的if條件是真的。

0

我認爲你要找的是strcmp

if(strcmp(argv[i], "/b") == 0) 
    printf("My name is pop\n"); 

編輯

for(i = 0; i < argc ; i++) 
{ 
    if(strcmp(argv[i], "/n") == 0) 
    { 
     printf("My name is pop\n"); 
     continue; 
    } 

    if(strcmp(argv[i], "/b") == 0) 
    { 
     printf("My birthday is 7.1.1999\n"); 
     continue; 
    } 

    //...etc 
} 

即使這樣你的做法是標新立異。通常你會想要使用類似getopts的東西,它會爲你解析命令行。

+0

我試過,但它只適用於一種選擇 – user3501945

+1

是的,其餘的部分被稱爲編程。你的整個循環都是錯誤的。您只需循環一次參數,並在該循環中進行所有比較。 – Duck