我正在尝试读取包含字符串和整数的外部文件(.dat),格式如下:
string 1
string 2
string 3等
并将这些值存储到单独的数组中(一个数组用于字符串,一个用于整数)。但是我只能设法在文件中分配第一个整数,所有后续整数和任何存在的字符串都不会被分配。这是我在partiular中的这部分代码:
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冲突
我已经设法读入并分配仅由整数组成的外部文件的值,但是在这种情况下无法弄清楚如何分配字符串或后续整数。任何帮助都非常感谢。谢谢。
注意:我明确建议不要使用多维数组,但并行数组是可以的。
答案 0 :(得分:1)
定义:
char string[20][20];
阅读使用:
if (fscanf_s(inp2, "%s %d", string[i], 20, &integer[i]) != 2)
…report error and break loop…
如果您要读取多达20个整数,则还需要20个字符串,每个字符串需要一些空格用于多个字符。使用2D字符数组非常简单,不需要您理解指针。建议的代码将fscanf_s()
的两个单独调用替换为一个 - 它完全能够处理它。始终检查I / O操作(尤其是输入操作)是否成功。请注意,fscanf_s()
可以返回EOF或1(标称值为0)以及2,但只有2表示成功。