我试图从下面的文件中只读取 float ,排除二维数组中所有月份和地区的名称,然后打印二维数组但没有得到正确的输出,(输出是零和垃圾值) 请检查我的代码并尝试提供帮助。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]){
FILE *f=fopen("Monthly_Rainfall_Himachal.txt","r");
float data[12][12];
int i,j;
char newLine[1000];
fgets(newLine,1000,f);
char* item;
fgets(newLine,1000,f);
while(!feof(f)){
for(i=0;i<12;i++){
item=strtok(newLine,"\t");
for(j=0;j<12;j++){
item=strtok(NULL,"\t");
data[i][j]=atof(item);
}
fgets(newLine,1000,f);
}
}
for(i=0 ;i<12 ;i++){
for(j=0 ;j<12 ;j++){
printf("%.1f\t",data[i][j]);
}
printf("\n");
}
return 0;
}
最佳答案
无需使用 strtok()
解析您的行,您可以使用 sscanf()
读取您的 float 。 .它们也是关于使用 %n
说明符的信息,这在使用 sscanf()
读取输入时很有用。
注意:除了使用 fgets()
/sscanf()
,您还可以直接使用 fscanf( )
,这是另一种可能的方法。
下面是一些示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINESIZE 1000
#define ROWS 12
#define COLS 12
int main(void) {
double data[ROWS][COLS];
char line[LINESIZE];
char *lineptr = NULL;
int offset, row = 0, col;
FILE *fptr;
fptr = fopen("Monthly_Rainfall_Himachal.txt","r");
if (!fptr) {
fprintf(stderr, "Cannot open file!\n");
exit(EXIT_FAILURE);
}
while (fgets(line, sizeof line, fptr) != NULL && row < ROWS) {
lineptr = line;
col = 0;
while (sscanf(lineptr, "%lf%n", &data[row][col], &offset) == 1 && col < COLS) {
lineptr += offset;
col++;
}
row++;
}
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%.2f ", data[i][j]);
}
printf("\n");
}
fclose(fptr);
return 0;
}
关于c - 从文件中读取 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42608095/