Почему при сканировании мой код работает бесконечно долго? - PullRequest
0 голосов
/ 20 июня 2019

Когда я пытаюсь запустить этот код, он просто работает бесконечно. Я пытался использовать scanf_s, но это ничего не изменило.

#include <stdio.h>

int main (void)
{
    int height, length, width, volume, weight;
    printf("enter height of box: ");
        scanf(" %d", &height);
    printf("enter length of box: ");
        scanf(" %d", &length);
    printf("enter width of box: ");
        scanf(" %d", &width);

    volume=height*width*length;
    weight=(volume+165)/166;

    printf("volume (cubic inches): %d\n", volume);
    printf("dimensional weight (pounds): %d\n", weight);

    return 0;
}

Ответы [ 3 ]

1 голос
/ 20 июня 2019

Первая печать в вашем коде (и аналогично другим):

printf("enter height of box: ")

По умолчанию эта строка помещает текст в буфер.Буфер записывается в терминал («сбрасывается»), только если происходит одно из следующих действий:

  1. Буфер заполнен (может быть 1024 байта, 16384 или любое другое число).
  2. В конце текста есть новая строка (при условии, что вывод на терминал).

    Обратите внимание, что это обычное поведение, но не гарантируется стандартом.Чтение Строка stdout буферизована, небуферизована или неопределена по умолчанию? для охвата этой темы.

  3. Некоторые реализации C автоматически сбрасывают stdout при чтении из stdin, но многиереализации не делают.

    Чтение Читает ли stdin stdout? , чтобы охватить эту тему.

Так что вы можете увидеть ваше приглашение, если выизмените строку на:

 printf("enter height of box: \n");

Второй вариант - принудительная очистка, чтобы буфер выводился на выход:

 printf("enter height of box: ");
 fflush(stdout);

Третий вариант - отключение буферизации.полностью.Для этого вы можете использовать setbuf :

void setbuf( FILE* stream, char* buffer );
  • buffer -
    указатель на буфер для используемого потока. Если задано значение NULL, буферизация отключена .Если не ноль, должно быть в состоянии содержать как минимум символы BUFSIZ

Итак, просто добавьте следующее в начале программы, и вся буферизация stdout будет отключена:

setbuf(stdout, NULL);
0 голосов
/ 20 июня 2019

Возможно, проблема в том, что вы не вводите какое-либо значение в качестве ввода.

Во всех других случаях код работает нормально.

0 голосов
/ 20 июня 2019

в коде нет ошибок. я попытался запустить его на Ubuntu и OnlineGDB. Код работает просто отлично. Это может быть ошибка вашего компилятора.

Вы должны проверить, что возвращает "scanf". Вы можете проверить это, используя это: - (здесь d - ваше целое число)

if (scanf("%d", &d) == 1)
    ...all OK...
else
    ...EOF or conversion failure...

Если у вас есть несколько преобразований, проверьте, все ли они завершены.

...