fprintf не дает ожидаемых значений - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь прочитать числа из нескольких текстовых файлов, начиная с «цифр», и рассчитать сумму. Я получаю некоторые случайные числа, которых нет в открываемом файле. Я попытался инициализировать массив в 0, но это просто сделало все 0 на выходе. Я считаю, что это проблемный раздел

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
DIR *d;
struct dirent *dir;
int fileAndSum(){
int sum = 0, i = 0;
int nums[100];
FILE* fptr = fopen(dir->d_name,"r");
 fputs("11111111111111111", fptr);
for(i = 0; i <10; i++){
  fscanf(fptr,"%d", &nums[i]);
  printf("%d\n", nums[i]);
  sum+=nums[i];
}
printf("%s\n", "----------sum--------------");
printf("%d\n", sum);
fclose(fptr);

Остальное

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
DIR *d;
struct dirent *dir;
int fileAndSum(){
int sum = 0, i = 0;
int nums[100];
FILE* fptr = fopen(dir->d_name,"r");
for(i = 0; i <10; i++){
  fscanf(fptr,"%d", &nums[i]);
  printf("%d\n", nums[i]);
  sum+=nums[i];
}
printf("%s\n", "----------sum--------------");
printf("%d\n", sum);
fclose(fptr);

}
int main(void) {
  d = opendir("numdir");
  char strhold[50] = "numbers";
  char fileName[50];
    while ((dir = readdir(d)) != NULL) {
    printf("%s\n", dir->d_name);
      if(strstr(dir->d_name, strhold)){
        printf("%s%s%s\n", "----------Now reading ",dir->d_name,"--------------");
        fileAndSum();
        printf("%s\n", "----------Next file--------------");
      }
    }
    closedir(d);

  return(0);
}

1 Ответ

0 голосов
/ 04 мая 2020

Ваши файлы для чтения находятся в каталоге numdir, но вы пытаетесь прочитать файлы в текущем рабочем каталоге.

Также вы должны проверить, если открытие файла прошло успешно.

, чтобы исправить , часть

FILE* fptr = fopen(dir->d_name,"r");

должна быть

char fileName[1024];
snprintf(fileName, sizeof(fileName), "numdir/%s", dir->d_name);
FILE* fptr = fopen(fileName,"r");
if(fptr == NULL){
  puts("open failed");
  return 0;
}
...