我是C编程新手并且一直在阅读它here.
我发现int
数据类型可用于为数值/整数声明变量,其值范围介于-32,768 to 32,767
或-2,147,483,648 to 2,147,483,647
之间。
虽然char
数据类型可用于存储-128 to 127 or 0 to 255
值。
IP地址怎么样?我已经尝试了int
但是只识别了IP的第一个八位字节。
它也不适用于char
。
码
C:\Codes>more input_output.c
#include <stdio.h>
int main()
{
int a;
int b;
char c;
printf("\n1. Enter a number : ");
scanf("%d",&a);
printf("You've entered %d\n",a);
printf("\n2. Enter an IP Address : ");
scanf("%d",&b);
printf("You've entered %d\n",b);
printf("\n3. Enter an IP Address : ");
scanf("%c",&c);
printf("You've entered %d\n",c);
return 0;
}
C:\Codes>
编译
C:\Codes>gcc input_output.c -o input_output
C:\Codes>
最终输出
C:\Codes>input_output.exe
1. Enter a number : 5
You've entered 5
2. Enter an IP Address : 8.8.8.8
You've entered 8
3. Enter an IP Address : You've entered 46
C:\Codes>
答案 0 :(得分:2)
IP
地址是真正的32
- 位整数,通常以字符串形式表示,如192.0.2.33
。它保存在结构struct sockaddr_in
中。
最好的方法是使用专门的函数inet_pton
将您的字符串转换为IP
地址并通过inet_ntop
#include <stdio.h>
#ifdef _WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#endif
int main (void)
{
int parts[4];
struct sockaddr_in sa;
char str[64];
// naive approach:
printf ("\n Enter 4 IP Address parts : \n");
scanf ("%d", &parts[3]);
scanf ("%d", &parts[2]);
scanf ("%d", &parts[1]);
scanf ("%d", &parts[0]);
printf ("%d.%d.%d.%d\n", parts[3], parts[2], parts[1], parts[0]);
// The best:
printf ("\n Enter IP Address in a format: 192.0.2.33 :\n");
scanf ("%s", str);
// store this IP address in sa:
inet_pton(AF_INET, str, &(sa.sin_addr));
// now get it back and print it
inet_ntop(AF_INET, &(sa.sin_addr), str, INET_ADDRSTRLEN);
printf("%s\n", str);
return 0;
}
输出:
Enter 4 IP Address parts :
190
0
2
33
190.0.2.33
Enter IP Address in a format: 192.0.2.33 :
190.0.5.22
190.0.5.22
答案 1 :(得分:1)
scanf("%d",&b);
停止(停止/不读取以下点字符),但您输入了8.8.8.8
下次扫描char
时,您获得.
的代码(点的ASCII为46
)
本Q&amp; A中描述了一种读取IP地址的正确方法:IP address input in C
答案 2 :(得分:1)
你学过琴弦了吗?这些基本上是很多字符。你可以用C语言写这样的东西。
const char* ip = "127.0.0.1"
或使用scanf
阅读char ip[256];
scanf("%s", ip);
行char ip[256]
定义了一个char数组。然后下一行scanf("%s", ip);
读取从键盘输入的任何内容到char数组。
仅仅因为ip地址中包含数字,这并不意味着你应该使用int来存储。 IP地址更像是电话号码。算术对它们没有意义。