如何在C

时间:2016-10-06 03:20:34

标签: c arrays string

我正在尝试读取包含字符串和整数的外部文件(.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冲突

我已经设法读入并分配仅由整数组成的外部文件的值,但是在这种情况下无法弄清楚如何分配字符串或后续整数。任何帮助都非常感谢。谢谢。

注意:我明确建议不要使用多维数组,但并行数组是可以的。

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表示成功。