C 从用户处读取端口号

C 从用户处读取端口号,c,input,C,Input,我声明我是C语言的初学者。 我正在用C编写一个服务器,代码如下: int main(int argc, char **argv) { ds_socket = socket(AF_INET,SOCK_STREAM,0); if(ds_socket == -1) errore_exit("creation socket"); struct sockaddr_in server; struct sockaddr client;

我声明我是C语言的初学者。 我正在用C编写一个服务器,代码如下:

 int main(int argc, char **argv)
 { 
     ds_socket = socket(AF_INET,SOCK_STREAM,0);
     if(ds_socket == -1)
         errore_exit("creation socket");

     struct sockaddr_in server;
     struct sockaddr client; 

     //set sockadrr_in

     server.sin_family = AF_INET;
     server.sin_port = htons(9999); 
     server.sin_addr.s_addr = INADDR_ANY; 

     //binding    
     if(bind(ds_socket, &server,sizeof(server)) == -1)
         errore_exit("binding");

   if(listen(ds_socket,1000) == -1)
       errore_exit("listen");

   client_socket = accept(ds_socket,&client,&(sizeof(client))); 

   if(client_socket == -1)
       errore_exit("accept");    
}
在设置结构服务器时,我使用了大量的任意端口(9999),但我希望以这种方式实现它:服务器在使用绑定为套接字分配地址之前向用户询问端口号。用户通过键盘输入端口号,服务器保存在变量“port”中,然后将该变量传递到结构的设置中


我不能完成刚才描述的最后一部分:有人能帮我吗?

使用
scanf
读取用户输入

int var;
scanf("%d", &var);
现在
var
包含用户键入的整数

您会注意到格式说明符与
printf
()非常相似

scanf返回它成功读取的值的数量。所以,为了确保用户输入一个数字,请检查scanf是否返回1

scanf的一个问题是,它在
stdin
中留下一个尾随的换行符。因此,您需要冲洗它:

void flush()
{
    int c;
    while ((c = getchar()) != '\n')
        ;
}
这将消耗所有字符,直到看到换行符为止。但不要使用
fflush(stdin)
进行刷新

阅读K&R中的scanf(第128页,第7.4节):

完整的scanf示例:

int main()
{
    int age;
    printf("What is your age?");

    if (scanf("%d", &age) > 0)
        printf("You are %d yrs old", age);
    else
        fprintf(stderr, "Numbers only!");
    flush();                      /* use the flush function shown above*/

    return 0;
}

困难是什么?关于如何读取用户输入的RTFM应该出现在任何书籍或教程的早期。你以前没做过吗?闻起来像是家庭作业……你真正的问题与网络无关,所以我去掉了这样的标签。我也相应地更改了标题。