Меню.Ввод-вывод.Проверка на ошибки ввода - C (СИ)
Формулировка задачи:
Здравствуйте, помогите переделать программу без go to при чтении ввода scanf
/*Задача: Напишите программу, которая выводит на экран меню, предлагающее выбрать сложение, вычитание, умножение или деление. После выбора программа должна запросить два числа и затем выполнить затребованную операцию.Программа должна принимать только варианты, предлагаемые в меню. чисел должен использоваться тип float и программа должна предоставлять пользователю возможность повторно вводить числа, если он ввел нечисловые данные. В случае деления программа должна предложить пользователю ввести другое значение, если он ввел для второго операнда
значение О. Выполнение такой программы должно иметь примерно такой вид:
Выберите желаемую операцию:
с. сложение в. вычитание
у. умножение д. деление
з. завершение
с
Введите первое число: 22.4
Введите второе число: о^ дин
один не является числом.
Введите число, такое как 2.5, -1.78Е8 или 3: 1
22.4 + 1 = 23.4
Выберите желаемую операцию:
с. сложение в. вычитание
у. умножение д. деление
з. завершение
д
Введите первое число: 18.4
Введите второе число: О
Введите число, отличное от О: 0.2
18.4 / 0.2 = 92
Выберите желаемую операцию:
с. сложение в. вычитание
у. умножение д. деление
з. завершение
s
Программа завершена.
Вот мой код:
Использовал go to, пожалуйста покажите как вводимые переменные читать(пока не получим цифру) с вложенным циклом вместо go to, и если можно вообще без цикла и без go to
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <ctype.h> #include <stdbool.h> int getfirst(void); void menu(void); int main(void) { setlocale(LC_CTYPE, "Russian"); double one; // часы в неделю double two; // чистый доход double resultat; // налог char i; // символ ставки bool a,b; menu(); while ((i = getfirst()) != 'q') { if (i == '\n') /* пропустить новую строку */ continue; i = tolower(i); /* Принимать заглавные в качестве строчных. */ switch(i) {case 'a':break; case 'b':break; case 'c':break; case 'd':break; default:printf("Попробуйте снова выбор из 5 вариантов:\n\n"); menu(); continue;//переход к началу цикла } a_1: printf("Введите первое число: "); a=(scanf("%lf",&one)); if(!a) {printf("Вы ввели не число, попробуйте ввести число: ");goto a_1;} a_2: printf("\nВведите второе число: "); b=(scanf("%lf",&two)); if(!b){ printf("Вы ввели не число, попробуйте ввести число: ");goto a_2;} if(i=='d'&&two==0){printf("Введите число отличное от 0: ");goto a_2;} if(i=='a')resultat=one+two; if(i=='b')resultat=one-two; if(i=='c')resultat=one*two; if(i=='d')resultat=one/two; printf("Результатом выбранной операции будет:%.2f\n",resultat); menu(); } printf("Программа завершена\n"); return 0; } void menu(void) { printf("***********************************************************************\n"); printf("Введите желаемую операцию:\n"); printf("a)Сложение b)Вычетание\nc)Умножение d)Деление\nq)Выход\n"); printf("***********************************************************************\n"); printf("Жду ввода: ");} int getfirst(void) { int ch; ch = getchar(); while (isspace(ch)) ch = getchar(); while (getchar() != '\n') continue; return ch; }
Решение задачи: «Меню.Ввод-вывод.Проверка на ошибки ввода»
textual
Листинг программы
[CODE] #include <stdio.h> int get_choise(void); // меню int get_first(void); // делаем выбор в меню float get_first_chislo(void); // получение 1 числа float get_second_chislo(void); //получение 2 числа int main() { int choise; float fch; float sch; while((choise = get_choise()) != 'e') { switch (choise) { case 'c': printf("Вы выбрали сложение:\n"); fch = get_first_chislo(); sch = get_second_chislo(); printf("%.2f + %.2f = %.2f\n", fch, sch, fch+sch); while(getchar() != '\n') continue; break; case 'v': printf("Вы выбрали вычитание:\n"); fch = get_first_chislo(); while(fch == 0) { printf("Число не должно быть равно 0. "); fch = get_first_chislo(); if(fch ==0) continue; else break; } sch = get_second_chislo(); while(sch == 0) { printf("Число не должно быть равно 0. "); sch = get_second_chislo(); if(sch ==0) continue; else break; } printf("%.2f - %.2f = %.2f\n", fch, sch, fch-sch); while(getchar() != '\n') continue; break; case 'y': printf("Вы выбрали умножение:\n"); fch = get_first_chislo(); sch = get_second_chislo(); printf("%.2f x %.2f = %.2f\n", fch, sch, fch*sch); while(getchar() != '\n') continue; break; case 'd': printf("Вы выбрали деление:\n"); fch = get_first_chislo(); while(fch == 0) { printf("Число не должно быть равно 0. "); fch = get_first_chislo(); if(fch ==0) continue; else break; } sch = get_second_chislo(); while(sch == 0) { printf("Число не должно быть равно 0. "); sch = get_second_chislo(); if(sch ==0) continue; else break; } printf("%.2f / %.2f = %.2f\n", fch, sch, fch/sch); while(getchar() != '\n') continue; break; case 'e': break; default: break; } } return 0; } int get_choise(void) // меню { int p; printf("============================================\n"); printf("=\tВыберите желаемую операцию: =\n" "= c. сложение v. вычитание =\n" "= y. умножение d. деление =\n" "= e. завершение =\n"); printf("============================================\n"); p = get_first(); while(p != 'c' && p != 'v' && p != 'y' && p != 'd' && p != 'e') { printf("Выберите вариант: c, v, y, d, e\n"); p = get_first(); } if(p == 'e') printf("Всего хорошего"); return p; } int get_first(void) { int p; p = getchar(); while(getchar() != '\n') { continue; } return p; } float get_first_chislo(void) // функция первого числа { float p; int g = 0; printf("Введите первое число :\n"); while(scanf("%f", &p) != 1) { while ((p = getchar()) != '\n') { putchar(p); g++; continue; } if(g > 0) { printf(" не являются числом.\n"); printf("Введите число, такое как 2.5, -1.78Е8 или 3:1\n"); continue; } } return p; } float get_second_chislo(void) //получаем второе число { float r; int g = 0; printf("Введите второе число :\n"); while (scanf("%f", &r) != 1) { while (( r = getchar()) != '\n') { putchar(r); g++; continue; } if(g > 0) { printf(" не являются числом.\n"); printf("Введите число, такое как 2.5, -1.78Е8 или 3:1\n"); continue; } } return r; } [/CODE]
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д