在C中将文件中的字符串和整数扫描到数组中

时间:2016-05-11 10:18:06

标签: c arrays string int scanf

我正在从一个文件扫描到并行数组。 我成功扫描了字符串,但是整数和浮点数无法正确扫描! 这里出了什么问题??? Num,human和cool是在main函数中声明的数组。

hello.txt中的记录示例: Angela, Merkel, 50, 10, 9.1

void read(int *lines, char first[ENTRY][FIRST], char last[ENTRY][LAST], int *num, int *human, float *cool)
{
FILE *ifile;
int i;

ifile = fopen("hello.txt", "r");

fscanf(ifile, "%[^,] %*c %[^,] %*c %d %*c %d %*c %f", first[0], last[0], &num[0], &human[0], &cool[0]);

printf("%s", first[0]);
printf("%s\n", last[0]);
printf("%d\n", num[0]);
printf("%d\n", human[0]);
printf("%f", cool[0]);



fclose(ifile);
}

2 个答案:

答案 0 :(得分:0)

尝试

$Metadata = New-Object System.Management.Automation.CommandMetaData (Get-Command Connect-MSOLService)
$Contents = [System.Management.Automation.ProxyCommand]::Create($Metadata) 

答案 1 :(得分:0)

首先,对于scanf系列函数,空格与输入中的任何数量的空格(包括无空格)匹配,也不使用%*c,这是没有必要的。其次,您需要在格式字符串中指定逗号以成功扫描字段。第三,当scanf总是检查其返回值以确保输入预期的数字字段时。试试这个修复:

void read(int *lines, char first[ENTRY][FIRST], char last[ENTRY][LAST], int *num, int *human, float *cool)
{
    FILE *ifile;

    ifile = fopen("hello.txt", "r");
    if (ifile == NULL) return;

    int ret = fscanf(ifile, "%[^,], %[^,], %d, %d, %f", first[0], last[0], &num[0], &human[0], &cool[0]);
    if (ret != 5) { // input file does not match the format
        return;
    }

    printf("%s ", first[0]);
    printf("%s\n", last[0]);
    printf("%d\n", num[0]);
    printf("%d\n", human[0]);
    printf("%f\n", cool[0]);

    fclose(ifile);
}