警告:代码完全无效。可能有很多错误。
意图:打印数据库中的ID名称: file.txt
file.txt(id,name)
1 ooo
2 eee
3 zzz
test.c :(只是草图。不起作用)。
虽然下面的脚本不起作用。我的意图是让它按原样运作。而不是使用其他一些方法。因为我有一种感觉,这将是一个非常合理的方法,只需很少的代码。在下面的示例中,我尝试获取 id 3
的名称#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
FILE *fff;
fff = fopen("/file.txt","r");
char *name;
int r, line = 0, found = 0;
float id;
r = fscanf(fff, "%f %s\n", &id, name);
while (r != EOF){
line++;
if(strcmp("3", id) == 0){
printf("%s",name);
}
}
return 0;
}
答案 0 :(得分:0)
您的代码有多个问题:
int
类型id
,因为它们似乎是一个范围相当小的整数。fopen()
是否成功打开文件。name
数组中以避免潜在的缓冲区溢出。fscanf()
成功的正确检查是将其返回值与预期转化次数进行比较。==
运算符进行比较,strcmp
代表C字符串。main()
定义为返回int
并在成功操作后返回0
。fscanf()
跟踪行号是不可能的:此函数会无差别地处理换行符和空格,并在数字和字符串之前忽略它。break
声明。以下是修改后的版本:
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main(void) {
char name[100];
FILE *fff;
int found = 0;
int id;
fff = fopen("/file.txt", "r");
if (fff == NULL) {
fprintf(stderr, "cannot open input file /file.txt: %s\n",
strerror(errno));
return 1;
}
while (fscanf(fff, "%d %99s", &id, name) == 2) {
if (id == 3) {
printf("%s\n", name);
found = 1;
break;
}
}
/* you could do something with the found indicator */
//if (found == 0) printf("no match for id == 3\n");
fclose(fff);
return 0;
}