2014-09-29 83 views
1

我剛剛開始學習C編程和練習,我發現這個任務。首先,我必須以協議名義進行掃描。然後我必須檢查協議的官方名稱,編號和別名。所以,如果我輸入TCP輸出應該是這樣的:
官方名稱:TCP
原號碼:6
別名TCPc getprotobyname獲取協議信息

這就是我這麼遠。當我運行它並輸入ip或tcp時,它不會給我任何錯誤。但它說協議沒有找到。

在此先感謝您的幫助。

#include <netdb.h> 
#include <stdio.h> 


int main(){ 
    char name[200]; 
    int i; 

    struct protoent *proto = getprotobyname(name); 

    printf("Enter protocol name: ");   
    scanf("%c", name); 

    proto = getprotobyname(name); 


    if (proto != NULL) 
    { 
     printf("official name: %s\n", proto->p_name); 

     printf("proto number: %d\n", proto->p_proto); 

     for (i = 0; proto->p_aliases[i] != 0; i++){ 
       printf("alias: %s\n", proto->p_aliases[i]); 
      } 
    } 
    else{ 
     perror("protocol not found"); 
    } 


     return 0; 
} 
+0

錯誤1:'getprotobyname(名);'被稱爲兩個時間一個before'name'初始化,第二個是後it.and錯誤2:'scanf(「%c」,name);'必須是'scanf(「%s」,name);' – 2014-09-29 10:48:18

回答

1
char name[200]; 
int i; 
struct protoent *proto = getprotobyname(name); 

這裏name被利用之後,你通過

scanf("%c", name); 

name這也是錯誤的讀取字符數組。需要%s格式說明符才能讀取char數組。所以它應該是

scanf("%s", name); 

你的代碼應該是

int main(){ 
    char name[200]; 
    int i; 

    struct protoent *proto; 

    printf("Enter protocol name: ");   
    scanf("%s", name); 

    proto = getprotobyname(name); 


    if (proto != NULL) 
    { 
     printf("official name: %s\n", proto->p_name); 

     printf("proto number: %d\n", proto->p_proto); 

     for (i = 0; proto->p_aliases[i] != 0; i++){ 
       printf("alias: %s\n", proto->p_aliases[i]); 
      } 
    } 
    else{ 
     perror("protocol not found"); 
    } 


     return 0; 
} 
+0

非常感謝。有用。 – niko85 2014-09-29 12:09:56

1

這裏是錯誤:scanf("%c", name);

你只是通過傳遞格式說明scanf%c讀一個單一的字符。有了這個getprotobyname()返回一個無效,因此你看到打印protocol not found

相反,您需要使用%s從標準輸入讀取整個字符串。

+0

非常感謝您的回答。它幫了我很多。 – niko85 2014-09-29 12:10:27

+0

@ niko85不客氣 – 2014-09-29 13:37:46