所以我的程序应该做的是:用这段代码读取.txt文件。
FILE *fp;
char filename[40],part1[4],part2[4];
int c=0,pt1,pt2;
printf("\nEnter a file name to open: ");
gets(filename);
if ((fp = fopen(filename, "r"))!= NULL)
{
printf("\nThe file %s was opened successfully!",filename);
}
else
{
printf("\nThe file didnt open succesfully!");
}
然后将每一行存储在row
字符串中。
fgets(part1,4,fp);
pt1 = atoi(part1);
struct input
{
char name[20],row[30],code[3],nPieces[3],needed[3],usage[3],nUses[3];
};
struct input list[pt1];
while (c++ < pt1 )
{
fgets(list[c].row,30,fp);
printf ("\n%s", list[c].row);
}
但问题是,之后我必须把行字符串切成碎片(对于exp,txt的第1行是&lt; 1 Glass 2 0 9 3 1&gt;其中每个数字代表什么)所以我想要的是把&#34; 1&#34;进入代码[3]字符串&#34; Glass&#34;到了名称[30]字符串等我尝试使用isspace()
扫描行字符串使其工作,每当它找到一个空格时,它将使用{{从0-(空格 - 1)复制行数组1}}。由于某些原因,当我运行程序停止工作。任何可以提出建议的人?
答案 0 :(得分:0)
似乎你想要分配一个大小为pt1的数组,但这不会起作用,因为这是编译时间,而pt1的值是未知的。
使用:
struct input
{
char name[20],row[30],code[3],nPieces[3],needed[3],usage[3],nUses[3];
};
你声明一个变量,但似乎你想要定义一个类型,所以:
typedef struct input
{
char name[20],row[30],code[3],nPieces[3],needed[3],usage[3],nUses[3];
};
然后你必须malloc内存:
struct input list= calloc(pt1, sizeof(struct input));
声明
struct input list[pt1];
应该给出编译器错误(对我的编译器有误)。
答案 1 :(得分:0)
所以我想要的是把#34; 1&#34;进入代码[3]字符串&#34; Glass&#34; 进入名称[30]字符串等。
使用sscanf()
而不是isspace()
和strncpy()
会更容易:
sscanf(list[c].row, "%2s%19s%2s%2s%2s%2s",
list[c].code,
list[c].name, list[c].nPieces, list[c].needed, list[c].usage,
list[c].nUses)