Ожидаемый ввод: SET_MINE X Y, а X и Y должны быть цифрами от 0-19; когда пользователь закончит вставлять свои данные, он, как ожидается, напишет SET_DONE. Я столкнулся с двумя проблемами здесь, которые, по-видимому, происходят по той же причине: 1. когда я вставляю: SET_MINE (а затем нажмите ENTER) или SET_MINE X (вставляя только одно число, а не два), строка «Вставить не удалось» : недостаточно параметров "печатается на экране бесконечное количество раз! 2. То же самое происходит, когда я вставляю числа из диапазона [0,19], например: SET_MINE 56 7. Вот, я ожидаю увидеть эту строку на экране «Вставить не удалось: незаконная строка/столбец», но вместо этого я получаю это: «Вставка сбой: недостаточно параметров» напечатано бесконечно много раз.Ошибка при вводе недопустимого ввода
Вот мой код:
int main()
{
int game_board[FIELD_ROWS][FIELD_COLS]={0};
char szLine[MAX_LINE_SIZE];
char* delimiters = " \t\n";
char* pszCommand;
char* pszCol;
char* pszRow;
BOOL gameContinue= TRUE;
MINE* pHead = NULL;
POSITION pos;
int stepDirection;
int row=0;
int col=0;
int old_row=row, old_col=col, mine=0;
fgets(szLine,MAX_LINE_SIZE,stdin); // get line from standard input
while (strncmp(szLine,"SET_DONE",8) != 0)
{
pszCommand = strtok(szLine, delimiters);
if (NULL == pszCommand)
{
continue;
}
if (0 == strcmp(pszCommand, "SET_MINE"))
{
pszRow = strtok(NULL, delimiters);
pszCol = strtok(NULL, delimiters);
if (NULL == pszCol || NULL == pszRow)
{
fprintf(stderr, "Insert failed: not enough parameters\n");
continue;
}
row = atoi(pszRow);
col = atoi(pszCol);
if (row <0 || row >= FIELD_ROWS || col < 0 || col >= FIELD_COLS)
{
fprintf(stderr, "Insert failed: illegal row/col \n");
continue;
}
game_board[row][col]=-1; // a mine is inserted to this place
}
fgets(szLine,MAX_LINE_SIZE,stdin); // get line from standard input
}
Любые идеи ?!
Это действительно работает; Кроме того, я пробовал «делать-пока» и писал «fgets» только в начале цикла, что тоже работает. – user2750466