Я пытался создать простую программу для изменения базы числа (i, e я даю основания 2 и 5, а число 101 и я должно получить 10) и при выполнении функции читать базы Я получаю следующее: Если я правильно набираю данные, которые он работает, если я этого не делаю (например, я набираю «231»), программа переходит в бесконечный цикл, почему это происходит?Почему эта программа дает мне бесконечный цикл? Простая программа
#include <stdio.h>
int main(void)
{
int base1,base2;
readBases(&base1,&base2);
printf("%d%d\n",base1,base2);
return 0;
}
void readBases(int *baseOrig, int * baseDest)
{
int aux1,aux2,flag;
do
{
printf("Type in the bases, in the format <a>b:");
flag=scanf("<%d>%d",&aux1,&aux2);
if(aux1<2||aux1>10||aux2<2||aux2>10)
{
flag=0;
printf("Invalid data.\n");
}
}while(flag!=2);
*baseOrig=aux1;
*baseDest=aux2;
}
Вы должны проверить значение 'flag' * перед * исследованием входных значений, но вместо этого вы игнорируете его и перезаписываете. –
Когда 'scanf' не может преобразовать вход, он возвращается к тому месту, где оно было остановлено. Ошибочный ввод останется в очереди и будет разбираться снова и снова. Я предлагаю вам прочитать целую строку с 'fgets', а затем проанализировать ее с помощью' sscanf'. –
@WeatherVane Я не понимаю, что вы имеете в виду, прежде чем перезаписывать его, я должен попасть в часть «scanf» и присвоить ему новое значение, возможно, я неправильно понял. – YoTengoUnLCD