проблемы со scanf и fgets - PullRequest
       75

проблемы со scanf и fgets

0 голосов
/ 20 октября 2019

У меня есть проект во вторник, и все работает, кроме этого крошечного пятна.

void main ()
{
    struct CHANNEL uChan;
    int flag = 0;

    //get name of channel
    printf("Enter the name of the channel: ");
    fgets(uChan.name, 15, stdin);

    //positive check loop from cylinderVolume.c
    do
    {
        flag = 1;
        printf("Please give roughness coefficient n, channel slope, width of channel and the maximum depth: ");
        scanf("%lf %lf %lf %lf ",&uChan.n, &uChan.slope, &uChan.width, &uChan.maxDepth);

        if(uChan.n <= 0.0 || uChan.slope <= 0.0 || uChan.width <= 0.0 || uChan.maxDepth <= 0.0)
          {
              printf("All values must be greater than zero.\n");
              flag = 1;
          }
        else
            flag = 0;
    } while(flag == 1);

    return;
}

(uChan - это структура, все ее члены определены здесь), когда я запускаю это (с остальнымимоего кода) он будет запрашивать 5 входов в строке scanf и независимо от того, что я ввожу в fgets, он всегда будет выводить 'á'

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Символ пробела в строке формата scanf (и семейство) предписывает scanf читать и игнорировать все символы пробела до непробельного символа.

В вашем случае

scanf("%lf %lf %lf %lf ",&uChan.n, &uChan.slope, &uChan.width, &uChan.maxDepth);
                  //  ^ this space is causing scanf to wait until a non whitespace character

Чтобы исправить это, удалите пробел

0 голосов
/ 20 октября 2019

Не используйте fget() и scanf() оба вместе, что может вызвать ошибки

scanf("%[^\n]s"],uChan.name); // this can also scan hole line 

так же, как fget

...