У меня есть вопрос, который я хочу задать о функции gets.
В настоящее время я пишу программу сложения 2 матриц, и я запутался в поведении функции gets. Из того, что я прочитал в описании от tutorialspoint о функции gets() в c, сказано, что "функция gets вернет str в случае успеха и NULL в случае ошибки или когда произойдет конец файла, когда символы не были прочитаны".
for (matrix_number = 0; matrix_number < 2; matrix_number++)
{
if (matrix_number == 0) { printf("MATRIX A\n"); }
else { printf("MATRIX B\n"); }
// dim = the dimension of the matrix that the user inputted
// Loop counter is for cycling through the matrix row, if dim is 3 then cycle 3x
// The user will type in the data in a format like this
// Type in the data for row 1 : 1 2 3
// 1 is the value for the first row and first column for the matrix
// 2 is the value for the first row and second column for the matrix and so on
for (loop_counter = 1; loop_counter <= dim; loop_counter++)
{
char row_value[20], space[2] = " ", *value_token;
printf("Type in the data for row %d :",loop_counter);
gets(row_value);
value_token = strtok (row_value,space);
while (value_token!=NULL)
{
insert( atoi(value_token) , matrix_number);
// convert value_token from string to int type
value_token = strtok (NULL,space);
}
}
}
Он компилируется, но когда я запускаю программу, я получаю что-то вроде этого
Welcome to the Matrix Addition Calculator Program!
Type in the dimension of the matrix : 3
MATRIX A
Type in the data for row 1 :Type in the data for row 2 :6 5 4
Type in the data for row 3 :3 2 1
MATRIX B
Type in the data for row 1 :1 2 3
Type in the data for row 2 :4 5 6
Type in the data for row 3 :7 8 9
Я не уверен, что происходит, для матрицы A ввод первой строки пропускается, но для матрицы B ввод первой строки не пропускается.
В настоящее время я использую gedit на elemtary luna для написания кода и gcc для его компиляции. Элементарная луна работает на виртуальной машине.
Спасибо всем, кто прочитал мой вопрос, если информации недостаточно, пожалуйста, дайте мне знать, надеюсь, кто-то может мне помочь, и большое спасибо! :)
gets
. - person haccks   schedule 03.10.2014gets(row_value)
наfgets(rowvalue, 20, stdin)
. документация fgets здесь - person Jabberwocky   schedule 03.10.2014stdin
. - person Spikatrix   schedule 03.10.2014Type in the dimension of the matrix : 3
дляscanf("%d%*c", &dim);
- person BLUEPIXY   schedule 03.10.2014stdin
есть символ\n
. - person Spikatrix   schedule 03.10.2014fflush(stdin)
надежно работает только в Windows; он не работает надежно в Unix, и стандарт C не определяет, что должно происходить. См. раздел Использованиеfflush(stdin)
. - person Jonathan Leffler   schedule 03.10.2014