如何从C中的文件中获取值?

如何从C中的文件中获取值?,c,C,我有一个程序从一个文件(名称input.inp)中获取值。此文件有3个值:10 20 cat。 我想通过调用函数readfile获得这些值,并在main()中打印该值。 但这不起作用。我希望有人能帮我解决这个问题。非常感谢 #include <stdio.h> #include <conio.h> #include <string.h> int read_file(int *a, int *b, char c[]) { FILE *f1; f1 =

我有一个程序从一个文件(名称input.inp)中获取值。此文件有3个值:10 20 cat。 我想通过调用函数readfile获得这些值,并在main()中打印该值。 但这不起作用。我希望有人能帮我解决这个问题。非常感谢

#include <stdio.h>
#include <conio.h>
#include <string.h>

int read_file(int *a, int *b, char c[]) {
FILE *f1;
    f1 = fopen("input.inp", "r");
    if(f1 == NULL) {
        return -1;
    }
    else {
    fscanf(f1, "%d", &a);
    fscanf(f1, "%d", &b);
    fscanf(f1, "[^\n]", &c);    
    }
    fclose(f1);
    return 0;
}

int main()
{
    int a = 0, b = 0;
    char c[100];
    read_file(&a, &b, c);     
    printf("%d",&a);
    printf("%d",&b);
    printf("%s",&c);
    return 0;
}
#包括
#包括
#包括
int read_文件(int*a、int*b、char c[]{
文件*f1;
f1=fopen(“input.inp”,“r”);
如果(f1==NULL){
返回-1;
}
否则{
fscanf(f1、%d、&a);
fscanf(f1、%d、&b);
fscanf(f1,“[^\n]”,&c);
}
fclose(f1);
返回0;
}
int main()
{
int a=0,b=0;
charc[100];
读取文件(&a、b、c);
printf(“%d”和“&a”);
printf(“%d”和“b”);
printf(“%s”、&c);
返回0;
}
更改这些

 fscanf(f1, "%d", &a);
 fscanf(f1, "%d", &b);
 fscanf(f1, "[^\n]", &c);   
进入

这些呢

 printf("%d",&a);
    printf("%d",&b);
    printf("%s",&c);
进入

最好为每个输出添加
\n
,以便清晰地看到。

更改这些

 fscanf(f1, "%d", &a);
 fscanf(f1, "%d", &b);
 fscanf(f1, "[^\n]", &c);   
进入

这些呢

 printf("%d",&a);
    printf("%d",&b);
    printf("%s",&c);
进入


最好为每个输出添加
\n
,以便清晰地看到。

更安全的方法是指定
读取文件
接受的数组类型,这样就不会覆盖缓冲区

另外,
fscanf(f1,“%s”,*c)
将读取指向数组指针的字符串,因此
*c
。使用
“%99s”
仅将读取限制为最多99个字符,为空终止符留出空间

装饰您的
printf
,以查看值来自何处

#定义_文件“input.inp”
int read_文件(int*a,int*b,char(*c)[100])
{
FILE*f1=fopen(_文件,“r”);
如果(f1==NULL)
{
perror(“fopen无法打开`“u文件””);
返回-1;
}
fscanf(f1,“%d%d%99s”,a,b,*c);
fclose(f1);
返回0;
}
内部主(空)
{
int a=0,b=0;
charc[100];
如果(读取文件(&a、b和c)=-1)
返回退出失败;
printf(“a:%d b:%d c:`s',a,b,c);
返回退出成功;
}

更安全的方法是指定所接受的数组类型
read\u file
以避免覆盖缓冲区

另外,
fscanf(f1,“%s”,*c)
将读取指向数组指针的字符串,因此
*c
。使用
“%99s”
仅将读取限制为最多99个字符,为空终止符留出空间

装饰您的
printf
,以查看值来自何处

#定义_文件“input.inp”
int read_文件(int*a,int*b,char(*c)[100])
{
FILE*f1=fopen(_文件,“r”);
如果(f1==NULL)
{
perror(“fopen无法打开`“u文件””);
返回-1;
}
fscanf(f1,“%d%d%99s”,a,b,*c);
fclose(f1);
返回0;
}
内部主(空)
{
int a=0,b=0;
charc[100];
如果(读取文件(&a、b和c)=-1)
返回退出失败;
printf(“a:%d b:%d c:`s',a,b,c);
返回退出成功;
}

fscanf(f1、%d、&a)应该是
fscanf(f1,“%d”,a)和其他
fscanf(f1,[^\n],&c)==>
fscanf(f1,“[^\n]”,c)也是。如果文件中的3项位于单独的行上,则第三个说明符需要一个空格来容纳上一个换行符,如
fscanf(f1,“[^\n]”,c)
fscanf(f1、%d、&a)应该是
fscanf(f1,“%d”,a)和其他
fscanf(f1,[^\n],&c)==>
fscanf(f1,“[^\n]”,c)也是。如果文件中的3项位于单独的行上,则第三个说明符需要一个空格来容纳上一个换行符,如
fscanf(f1,“[^\n]”,c)“%[^\n]s”
[^\n]
将不会将任何内容读入
c
。Right@BoR。我忽略了,这是一个快速的回答。非常感谢@IrAM和bor。它工作得很好。如果没有
“%[^\n]s”
[^\n]
将无法将任何内容读入
c
。Right@BoR。我忽略了,这是一个快速的回答。非常感谢@IrAM和bor。它工作得很好。