我的简单程序一次只能从文本文件中读取一个字。
示例文本文件。 (下同)
N 101001循环队列11 1
N 123456 List Linker 11 5
N 666666 Pseudocode Gen 38 3
N 110010 Stack Stretcher 3 2
和包含变量等的简单代码......
char function;
int number, init_stock, reorder;
char info[100];
FILE *fp;
if((fp = fopen("input.txt", "r")) == NULL)
{
printf("input open failed\n");
return 0;
}
while(!feof(fp))
{
fscanf(fp, "%c %d %[A-z, ] %d %d ", &function, &number, info, &init_stock, &reorder);
}
当变量在'内变更时while loop',
我预计也会影响下一个循环。
所以..首先,'循环队列'存储在' info'中。
第二,何时列出链接器'存储在' info'因为第二个字符串比第一个字符串短,
我认为info数组有这样的字符串' List Linkerue'。
- info - 循环Que ue
- info - 列出链接器+ ue
醇>
但信息似乎每次都会重置,我不知道为什么。
答案 0 :(得分:0)
在第一遍中,info
的内容为"Circular Queue \0"
末尾的\0
表示单个零字节,它是空字符。这告诉像printf
这样的函数,其中字符串结束。
请注意,最后还有一个空格。
在第二次传递中,info
的内容为"List Linker \0e"
。如您所料,fscanf
没有填写整个字符串。但它确实添加了空字符,因此您无法在最后看到e
。 info
的内容将是
1st pass: "Circular Queue " ... followed by random bytes
2nd pass: "List Linker \0e "
您还可以通过将格式更改为%99[A-z, ]
来改进您的功能,因为info
是100个字节(包括空字符)并确保fscanf
按预期读取5个值。您也可以考虑更改输入,以便用逗号分隔值。
while(fscanf(fp, "%c %d %99[A-z, ] %d %d ",
&function, &number, info, &init_stock, &reorder) == 5)
{
//optional: remove the extra space at the end of info
int len = strlen(info);
if(len)
if(info[len - 1] == ' ')
info[len - 1] = 0;
printf("string: [%s] %d\n", info, number);
}