Неправильная работа цикла while, но не могу понять в чем заключается проблема

#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS

int main ()
{
    FILE *number, *definition;
    int x, y;
    printf ("Enter the definition number :");
    scanf ("%d", &x);

    number = fopen ("number.txt", "wt");
    fprintf (number, "%d", x);
    fclose (number);

    number = fopen ("number.txt", "r");
    definition = fopen ("definition.txt", "w");
    fscanf (number, "%d", &y);
    printf ("%d\n", y);
    fclose (number);
    fprintf (definition, "%d\n", y);
    fclose (definition);

    scanf ("%d", &y);
    while (1)
    {
        if (y == 1)
            printf("CPU is an electronic unit or an integrated circuit that executes machine instructions, the main part of the hardware of a computer or a programmable logic controller.");
        if (y == 2)
            printf("RAM is in most cases an energy-dependent part of a computer memory system, in which the executed machine code is stored during computer operation.");
        if (y == 3)
            printf("A motherboard is a printed circuit board that is the basis for building a modular electronic device, for example, a computer.");
    }
  return 0;
}

Пробовал разные варианты, через goto, ставил/убирал фигурные скобки и т.д.
Ошибка заключается в том, что при вводе в консоль например, значение 1, код "съедает" это значение, а если потом ввести еще раз 1, то они складываются и выводится if( y == 2 ), при чем бесконечное кол-во раз.(Сразу прошу прощения,за то как оформлен мой код тут, не совсем понимаю как надо его оформлять)


Ответы (1 шт):

Автор решения: DmitryK

Ну программа у вас и запрограммирована так, как вы описали.
Всего вы вводите с клавиатуры 2 значения - x и y. Между ними - самодостаточная работа с файлами, которая не требует реакции от пользователя. И да, после того, как вы ввели x, вы ничего с ним не делаете.

int main ()
{
    ....
    scanf ("%d", &x);
    ....
    scanf ("%d", &y);
    ....

А потом у вас стоит "вечный" цикл while(1). Вы ведь не сделали никакого условия для выхода из цикла. Если второе значение - y равно 1,2 или 3 - то цикл будет вечно печатать одну из строчек. А если y равен другому числу - то цикл будет работать вечно и ничего не печатать.

    scanf ("%d", &y);
    while (1)
    {
        if (y == 1)
            printf("CPU is an ....");
        if (y == 2)
            printf("RAM is ....");
        if (y == 3)
            printf("A motherboard is a ....");
    }  

Так что цикл у вас работает правильно!
А как по-вашему программа должна работать?

→ Ссылка