我刚刚开始学习C编程和练习,我找到了这个任务。首先,我必须扫描协议的名称。然后我必须检查协议的正式名称,编号和别名。因此,如果我输入tcp,输出将如下所示:
官方名称:tcp
原型号:6
别名TCP
这是我到目前为止所得到的。当我运行它并输入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)
以下是错误:scanf("%c", name);
您只是通过将格式说明符传递给带有scanf
的{{1}}来阅读单个字符。如果此%c
返回无效,则会看到打印getprotobyname()
。
相反,您需要使用protocol not found
从标准输入读取整个字符串。
答案 1 :(得分:1)
char name[200];
int i;
struct protoent *proto = getprotobyname(name);
此处使用name
,之后您通过
name
scanf("%c", name);
读取char数组也是错误的。需要%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;
}