#include <stdio.h>
int main() {
FILE *f;
unsigned int num[80];
int i=0;
int rv;
int num_values;
f=fopen("values.txt","r");
if (f==NULL){
printf("file doesnt exist?!\n");
return 1;
}
while (i < 80) {
rv = fscanf(f, "%x", &num[i]);
if (rv != 1)
break;
i++;
}
fclose(f);
num_values = i;
if (i >= 80)
{
printf("Warning: Stopped reading input due to input too long.\n");
}
else if (rv != EOF)
{
printf("Warning: Stopped reading input due to bad value.\n");
}
else
{
printf("Reached end of input.\n");
}
printf("Successfully read %d values:\n", num_values);
for (i = 0; i < num_values; i++)
{
printf("\t%x\n", num[i]);
}
return 0
}
从另一个问题中获取了上面的代码,但是有问题对其进行编辑以满足我的要求,每次我更改它似乎到处都会出错。
这也只是一个简单的更改。
文件的输入示例为 12345678
87654321
1234567811
12345678
当使用此方法从文件中读取时,当我只想获取前 8 个十六进制数字并保存它们时,请获取每一行的全部内容。
我尝试使用 fgets 来获取该行,然后使用 scanf 对其进行格式化,但错误却失控了。
我脑子里有但不知道如何实现的想法是 1.打开文件
f获取当前行
scanf 格式化当前行
获取前 8 位数字
将它们保存到数组
循环直到文件末尾(而不是像上面代码中的 <80)
我是 c 语言的新手,并且习惯了 java。
最佳答案
尝试
char buffer[201];
while (fgets(buffer, 200, f) != NULL)
{
if (strlen(buffer) > 7)
{
buffer[8] = 0;
sscanf(buffer, "%x", &num[i++]);
}
else
{
/* report that the line is error ?! */
}
}
关于C - Fgets &Scanf 从文本文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232150/