我向用户询问了一个带有数组的文件,并将数组从文件复制到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;
}
答案 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输入数据。