-2

我是新手,fgets所以我不知道我做错了什么。我需要制作一个浮点数表,但在标准输入期间我不断出现段错误。为了便于阅读,我删除了所有“不必要的”代码,所以是的,我确实使用了参数中的所有参数。即使我输入一个数字,它也会出现故障。

typedef struct row
{
    int column;
    float value[20];
}ROW;

//in main ROW table[100];

void makeTable2(ROW* table, int* row, int* column)
{
    int counter = 0, counter2;
    int y = 0;

    char str[256], again;

    printf("Enter in the table: ");

    do{

        fgets(str, 256, stdin);

        while(sscanf(str, "%f", &table[*row].value[y]))
            y++;

        (*row)++;

        printf("Add another row? (y or n)? ");
        scanf("%c", &again);

    }while(again == 'y' || again == 'Y');
}
4

2 回答 2

1

排队

   while(sscanf(str, "%f", &table[*row].value[y]))

您每次都在读取您的第一个数字,而不是 NEXT,只有第一个,并且当 y 超过值 20 时会出现缓冲区溢出。分别尝试 scanf() 每个值。

于 2013-09-20T09:24:39.230 回答
0
while(sscanf(str, "%f", &table[*row].value[y]))
     y++;

那是一个无限循环。您总是从 str 缓冲区中存在的第一个浮点值读取,最终 y 变得超过 19 并且存在分段错误。

于 2013-09-20T09:32:12.817 回答