C函数从文件中读取2个值

时间:2016-05-30 17:59:33

标签: c arrays function char

我有一个带有一些数字的.txt文件(例如1 2 3等),我想从这个文件读取前两个数字,将第一个数字分配给val1,将第二个数字分配给val2,但我必须使用单独的功能执行此操作。我认为最好的方法是声明一个包含两个整数的数组,然后将这些扫描的数字分配给数组中的这些整数。这是我的主要内容:

int main()
{
    int val1, val2;
    int array[2];
    char file_name[10];

    printf("Filename: ");
    scanf("%s",&file_name);

    getValues(file_name, array);
    val1 = array[0];
    val2 = array[1];
}

从文件中读取2个数字并将其保存到数组的函数如下所示:

void getValues(char *file_name, int *array)
{
    FILE *f;
    if((f = fopen(file_name, "r") == NULL))
        {
            fputs(stderr, "Cannot open this file!");
            exit(EXIT_FAILURE);
        }

    fscanf(f,"%d %d",&array[0],&array[1]);
    printf("1st value: %d\n 2nd value: %d",array[0],array[1]);
    fclose(f);
}

程序编译,但为数组中的整数返回一些垃圾值,最终崩溃。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

我从修复警告开始:

$ gcc main.c 
main.c: In function ‘getValues’:
main.c:7:11: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     if((f = fopen(file_name, "r") == NULL))

然后它只对我进行了一些轻微的类型更改。

#include <stdio.h>
#include <stdlib.h>

void getValues(char *file_name, int *array)
{
    FILE *f;
    if( (f = fopen(file_name, "r")) == NULL )
    {
        printf("Cannot open this file!");
        exit(EXIT_FAILURE);
    }

    fscanf(f,"%d %d",&array[0],&array[1]);
    printf("1st value: %d\n 2nd value: %d",array[0],array[1]);
    fclose(f);
}

int main()
{
    int val1, val2;
    int array[2];
    char file_name[10];

    printf("Filename: ");
    scanf("%s",file_name);

    getValues(file_name, array);
    val1 = array[0];
    val2 = array[1];
}

文件data.txt

2 3

输出

/system/cmake/generated/gnu-fadf49ce/fadf49ce/Debug/gnu
Filename: data.txt
1st value: 2
 2nd value: 3
Process finished with exit code 0

答案 1 :(得分:0)

首先不需要为它编写两个函数。 但即便如此,这应该可以正常工作:

#include<stdio.h>
#include<fcntl.h>
#include<sys/types.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
void reader(int,char *);
int main()
{
 int fd;
 char buf[3];
 if((fd=open("text.txt",O_RDONLY))==-1)
   {
    perror("can't open file or file does not exist\n");
    exit(0);
   }
 printf("The values are:\n");
 reader(fd,buf);
 return 0;
}

void reader(int fd,char buf[])
{
 read(fd,buf,3);
 printf("value of first integer val1 is: %c\n",buf[0]);
 printf("value of seconnd integer val2 is: %c\n",buf[1]);
 close(fd);
}