我有一个带有一些数字的.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);
}
程序编译,但为数组中的整数返回一些垃圾值,最终崩溃。我在这里做错了什么?
答案 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);
}