1 Востаннє редагувалося Тарасій (18.11.2018 12:55:09)

Тема: Структура Do While

Написав код програми, але необхідно, щоб перед пунктом 2 хоча б один раз виконувався пункт 1(Введення даних)
Підкажіть як виправити

#include <stdio.h>
#include <locale.h>
#include <windows.h>

int main()
{

int n ;
float px, kx, krok, y, a;
SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    while(1){
printf("1.Введення даних\n2.Обчислення функцій\n3.Завершення\n\n\nЗдійсніть вибір:");
scanf("%d", &n );
switch(n){
 case 1 : printf("Введіть початкове і кінцеве значення та крок зміни аргумента Х:\n");
           scanf ("%f %f %f", &px, &kx, &krok );break;
 case 2 : printf ("Крок   X    Y \n" );

            do{
                a=px;
                y=1.0/a+pow(a,2);
            printf("\n%.2f  %.2f  %.2f\n", krok, a, y);
            px+=krok;
            }

            while(a<=kx);break;
 case 3 : printf ("ПОКА.Кінець\!!");
           exit(0);

}
system("pause");

}
return 0;
}

2

Re: Структура Do While

Прихований текст

Майже не можу писати, бо кров з очей ))

1. Невеличке зауваження - сучасні консоли в цілому підтримують мультібайтові строки. тож краще користуватися їми, замість однобайтових, якщо це звичайно не принципово.
2. Декларація змінної без її ініціалізації - це завжди помилка.
3. За такої структури вам потрібно або вводити додатковий флаг, який би сігналізував що етап вводу у вас був виконаний, а потім превіряти його, або (що логічно) просто викинути перший крок меню, та пропонувати користувачу ввести дані перед обчисленням. Бо не зрозуміло, навіщо вам окремо вводити данні, а потім окремо їх обчислювати. Це не юзерфредлі та й просто не зручно. Але якщо вам це рішення дуже потрібне - то вам потрібма додаткова змінна, яка буде сігналізувати, чи данні введені чи ні. Ну у обчислення та введеня данніх краще винести в окремі функції

Подякували: leofun011

3

Re: Структура Do While

Пара уточнень:
0. Пан varkon каже про вирівнювання коду. Самому ліньки - є вбудована в майже кожен IDE функція та купа сайтів, де це можна зробити онлайн.
1. Не беріть у голову. Спершу розберіться, як узагалі програмувати і зі стрічками працювати, а потім переходьте до багатобайтових.
2. Не завжди, але найчастіше - так.
3. Раджу досить криве, але лаконічне й ефективне рішення: виставляєте значення n перед циклом в 1, а вводите вибір користувача (зараз це стрічки 13-14) після switch. Тоді перший раз цикл пройде по гілці case 1, а потім запитає, що робити далі - тобто те, що нам треба.

4

Re: Структура Do While

Дуже дякую за варіанти вирішення проблеми.

5

Re: Структура Do While

koala написав:

3. Раджу досить криве, але лаконічне й ефективне рішення: виставляєте значення n перед циклом в 1, а вводите вибір користувача (зараз це стрічки 13-14) після switch. Тоді перший раз цикл пройде по гілці case 1, а потім запитає, що робити далі - тобто те, що нам треба.

тут всі рішення криві, але флаг дозволить опрацьовувати подвійний вибір другого пункта. Ну й загалом перший пункт зайвий )) але це можливо є частиною завдання ))