2013-10-24 40 views
2

我想写一个C语言程序,它是从用户处取得输入IP地址,然后我想对它做一些操作。我怎样才能在C中的位输入我试着下面的代码,但整数大小为2个字节,这使得这里的8个字节(64位)的完整地址。当使用char来扫描输入时,它会丢失输入的值。有什么方法可以输入位(我只想要32位IPv4地址只有32位,128位V6只有128位)。在C中输入IP地址

unsigned short int a,b,c,d; 
scanf("%d.%d.%d.%d", &a,&b,&c,&d); 
printf("%d\t%d\t%d\t%d\t", a, b, c, d); 

在此先感谢。

+0

使用'inet_addr()'函数来解析虚线四元组。 – Barmar

+0

OT:'unsigned short int'的格式说明符应该是'%hu'。 '%d'需要一个'signed int'。 – alk

+0

会十六进制格式对你有好处(“%x”),强迫用户将他的IP地址转换为ea070701例如(234.7.7.1)? – NiRR

回答

3
#include <stdio.h> 

int main(void) 
{ 
     unsigned char a,b,c,d; 
     scanf("%hhu.%hhu.%hhu.%hhu", &a,&b,&c,&d); 
     printf("%hhu\t%hhu\t%hhu\t%hhu\t", a, b, c, d); 
     return 0; 
} 

$ gcc t.c && ./a.out <<< 12.12.12.12 
12 12 12 12 

例如见this reference找到根据目标变量的(文件中第3台)的类型要使用的说明符。

+0

您还应该使用'%hhu'打印。 –

+0

@ 0xF1更正。 – damienfrancois

+0

我得到不同的输出 'C:\代码> ip_address_test.exe 8.8.8.8 C:\代码>' 而这个错误编译时它 '未知的转换类型字符1 H 'in format' 完整的代码和错误在这里... https://pastebin.com/0qqwY7uR – Sabrina