c - while循环中变量变化的问题
问题描述
我的简单程序是从文本文件中一次读取一个单词。
示例文本文件。(以下)
N 101001 循环队列 11 1
N 123456 列表链接器 11 5
N 666666 伪代码 Gen 38 3
N 110010 堆叠式担架 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循环'中被改变时,
我希望在下一个循环中也会影响它。
所以..首先,“循环队列”存储在“信息”中。
其次,当“列表链接器”存储在“信息”中时,因为第二个字符串比第一个字符串短,
我认为信息数组有这样的字符串'List Linkerue'。
- info -- 循环队列
- info -- 列出链接器+ ue
但是信息似乎每次都被重置,我不知道为什么。
解决方案
在第一遍中,最后的内容info
是"Circular Queue \0"
The\0
表示单个零字节,它是空字符。这告诉函数,比如printf
字符串在哪里结束。
请注意,最后还有一个空格。
第二遍的内容info
是"List Linker \0e"
。正如你所怀疑的,fscanf
没有填满整个字符串。但它确实添加了空字符,所以你看不到e
最后的。内容info
将是
1st pass: "Circular Queue " ... followed by random bytes
2nd pass: "List Linker \0e "
您还可以通过将格式更改为 100 字节(包括空字符)来改进您的功能,%99[A-z, ]
并info
确保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);
}
推荐阅读
- django - 找不到“facebook_login”的反向
- salesforce - Salesforce 中现有记录中的字段未更新
- python - 在 Python 中将数据发布到 api 时无法将 str 连接到字节错误
- c# - 提高 LINQ 性能的方法
- java - 尝试从 serenity.conf 读取特定于环境的数据时获取空值
- amazon-web-services - Dynamodb - 用少量数据创建大量分区是不好的做法吗?
- c# - 反序列化通过套接字发送的消息时出现 SerializationException
- java - 如何使用 Gmail API 检索电子邮件正文内容?
- node.js - 节点 MongoDB 批量查找?
- c# - 在 ASP.NET 样板中通过 JWT 令牌获取用户 ID