我需要创建一个C程序(我正在使用Xcode),它读取一个文件并将第一行分隔成4个不同的变量。
我有一个名为“network”的typedef结构:
typedef struct {
int a, b, c, d;
char op_sys[10];
} network;
我还有一个文件,其中包含IP地址列表及其操作系统。
例如,第一行是:192.116.112.1 windows
我想扫描第一行,然后:
a = 192
b = 116
c = 112
d = 1
op_sys = "windows"
然后转到下一行,做同样的事。。
知道怎么做吗?任何建议都很好!!!
我正在一步一步地尝试。它正在读取文件并打印它,我只是不知道如何将它分离成单独的变量。
int main(void)
{
FILE *input;
char s[25];
input = fopen("inputfile.txt", "r");
while(fgets(s, 25, input) != NULL)
{
printf("%s\n", s);
}
return 0;
}
最佳答案
这里有一个简单的实现:
#include <string.h>
#include <stdio.h>
#define SIZE 10 // Max length (including NULL character at the end) of op_sys field
typedef struct {
int a, b, c, d;
char op_sys[SIZE];
} network;
int main(int argc,char *argv[])
{
FILE *input;
char s[16+SIZE+1]; // This will contain a line from the text file. (16+SIZE+1) is the max length possible for a line.
// 16 for IP address, SIZE for the OS name and 1 for the NULL character.
network net;
char *token=NULL;
char delim[]={'.',' ','\n','\0'}; // Delimiters used to divide each line in tokens
input = fopen("inputfile.txt", "r");
while(fgets(s,(16+SIZE+1),input)!=NULL)
{
token=strtok(s,delim); // We get the first octet of the address
net.a=atoi(token);
token=strtok(NULL,delim); // We get the second octet of the address
net.b=atoi(token);
token=strtok(NULL,delim); // We get the third octet of the address
net.c=atoi(token);
token=strtok(NULL,delim); // We get the fourth octet of the address
net.d=atoi(token);
token=strtok(NULL,delim); // We get the OS name...
char *ptr=net.op_sys;
ptr=strncpy(ptr,token,SIZE); // ... and we copy it in net.op_sys
ptr[SIZE-1]='\0';
printf("%3d.%3d.%3d.%3d\t\t%s\n",net.a,net.b,net.c,net.d,net.op_sys); // We print the values of all the fields
}
fclose(input);
return 0;
}
记住,这个实现不会检查行的格式是否正确,也不会检查操作系统名称的长度是否大于大小。我把那种支票留给你。