【问题标题】:How to store strings and integers in arrays in C如何在C中将字符串和整数存储在数组中
【发布时间】: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);,这会导致下一个问题:一个字符串只有一个缓冲区,如果没有更多内存,如何保护其他缓冲区?你可以不用二维数组,但这会变得更加复杂。

标签: c arrays string


【解决方案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 表示成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多