我用一个数组扫描一个.dat文件然后打印它,但是当我重新打印它时会打印出奇怪的数字

时间:2017-06-10 00:39:49

标签: c arrays random

我向用户询问了一个带有数组的文件,并将数组从文件复制到c[50]数组,并在将数值添加到数组时打印出每个值。出于好奇,我决定重新打印c[50]数组的值,令我惊讶的是,数字完全不同(大数字)。

#include <iostream> 
#include <stdio.h>
using namespace std;

int main() {
  int c[50], k = 0, d[50], i, s;
  float r;
  FILE * fin;
  char filename[15], l;
  printf("De el nombre del archivo:\n\n");
  scanf("%s", filename);
  fin = fopen(filename, "r");
  if (fin == NULL) {
    printf("\nNo se pudo abrir el archivo.\n");
    return 1;
  }
  fscanf(fin, "%c", & c[k]);
  while (!feof(fin)) {
    printf("%c", c[k]);
    k++;
    fscanf(fin, "%c", & c[k]);
  }
  //s is the size of the array idk why it makes the k double the amount that what it really is but it doubles it.
  s = k / 2;
  printf("%d\n", s);

  for (i = 0; i < s; i++) {
    printf("%d  ", c[i]);
  }

  return 0;
}

1 个答案:

答案 0 :(得分:1)

您看到的完全随机数是因为您正在将字符(1字节)fscanf(fin, "%c", & c[k]);读入整数(4字节)int c[50];,因此只写入最低字节。编译时应该看到警告:warning: format '%c' expects argument of type 'char*', but argument 3 has type 'int*' [-Wformat=]。然后,当您打印该值时,第一次printf("%c", c[k]);打印文件中的每个字符,重新创建文件内容。

当我将第一个printf("%c", c[k]);更改为printf("%d\n", c[k]);时,程序每次打印时输出相同的数字。

使用proper input specifier输入数据。