【发布时间】:2016-10-06 03:20:34
【问题描述】:
我正在尝试读取由字符串和整数组成的外部文件 (.dat),格式如下:
字符串 1
字符串 2
字符串 3 等
并将这些值存储到单独的数组中(一个数组用于字符串,一个用于整数)。但是我只能设法分配文件中的第一个整数,所有后续整数和存在的任何字符串都不会被分配。这是我在这部分的代码:
char string[20]; /*20 is used as a placeholder for the time being*/
int integer[20];
FILE *inp2; /*pointer to input file 2*/
int file_succeed1 = fopen_s(&inp2,"C:\\Users\\input2b.dat", "r"); /*Boolean test*/
if (file_succeed1 != 0)
{
printf_s("There was an error opening the file \n");
return 0; /*The file failed to be read, end of program.*/
}
for(i = 0; i <=20; i++)
{
fscanf_s(inp2, "%s", &string[i], 20);
fscanf_s(inp2, "%d", &integer[i]);
}
fclose(inp2); /*close the input file*/
我在尝试打印信息时收到警告消息:
警告 C4477:“printf”:格式字符串“%s”需要“char *”类型的参数,但可变参数 1 的类型为“int”
警告 C4313:“printf”:格式字符串中的“%s”与“int”类型的参数 1 冲突
我已经设法读入并分配了一个仅由整数组成的外部文件的值,但是在这种情况下无法弄清楚如何分配字符串或后续整数。非常感谢任何帮助。谢谢。
注意:我被明确建议不要使用多维数组,但并行数组是可以的。
【问题讨论】:
-
如果
printf给你错误,你为什么要发布不同的东西呢?另外:它应该是fscanf_s(inp2, "%s", string[i], 20);,这会导致下一个问题:一个字符串只有一个缓冲区,如果没有更多内存,如何保护其他缓冲区?你可以不用二维数组,但这会变得更加复杂。