Я должен сделать систему заказов для ресторана быстрого питания (это просто школьный проект). Я уже закончил инструмент.
Но учитель сказал нам использовать getch вместо scanf.
Но я не понимаю, как его реализовать .. Могу ли я просто заменить свой scanf в коде на getch? Мне не нужно эхо от Scanf, и мне не нужно подтверждение нажатием клавиши ENTER.
Задача была:
Создать инструмент CMD на языке программирования C. НЕТ GUI! Решение должно включать команды «malloc», «realloc», «getch» и free. CMD Tool - это процесс заказа для воображаемого ресторана быстрого питания. Меню выглядит так:
A «Большой бургер» 4,90 €
B «Маленький бургер» 1,90 €
C «Wrap» 4, 90 €
D „Salat“ 2,90 €
E „Frites“ 1,90 €
F „Softdrink“ 1,90 €
G „Watter“ 1,20 €
H „Ketchup“ 0,30 €
Кассир может вводить заказ с клавиатуры. Если кто-то заказывает еду A и еду C , Он печатает букву А или А и C или c. Буквы в нижнем и верхнем регистре не имеют значения.
Каждый ордер должен отображаться в одной строке.
После завершения ордера инструменты должны отображать сводку ордера. Все блюда, которые были заказаны и краткое изложение цены. Чтобы завершить заказ, нажмите букву X.
С помощью буквы Z вы можете отменить заказ.
My Tool with Scanf:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
int main()
{
char *order;
char *Total_Order;
int end = 1;
start: //Festlegung goto Label, bei Bestellabbruch.
order=(char*)malloc(1*sizeof(char));
Total_Order = (char*)calloc(1, sizeof(char));
// float für Kommazahl, Variable entspricht Preis vom Essen.
float A=4.90 ,B=1.90 ,C=4.90 ,D=2.90 ,E=1.90 ,F=1.90 ,G=1.20 , H=0.30;
printf("Order:\n");
printf(" A Big Burger 4.90EUR \n B Little Burger 1.90EUR \n C Wrap 4.90EUR \n D Salat 2.90EUR \n E Frites 1.90EUR \n F Softdrink 1.90EUR \n G Water 1.20EUR \n H Ketchup 0.30EUR \n");
int n=1;
do {
scanf(" %c",order);
//printf("%c\n",*order);
if(n==1){
printf("Enter Order:\n");
}
char temp=*order;
temp=tolower(temp);
switch (temp) {
case 'a':
printf("A Big Burge 4.90EUR \n");
Total_Order[n-1]='a';
break;
case 'b':
printf("B Little Burger 1.90EUR \n");
Total_Order[n-1]='b';
break;
case 'c':
printf("C Wrap 4.90EUR \n");
Total_Order[n-1]='c';
break;
case 'd':
printf("D Salat 2.90EUR \n");
Total_Order[n-1]='d';
break;
case 'e':
printf("E Frites 1.90EUR \n");
Total_Order[n-1]='e';
break;
case 'f':
printf("F Softdrink 1.90EUR \n");
Total_Order[n-1]='f';
break;
case 'g':
Total_Order[n-1]='g';
printf("G Watter 1.20EUR \n");
break;
case 'h':
Total_Order[n-1]='h';
printf("H Ketchup 0.30EUR \n");
break;
default:
printf(" ");
break;
}
if(*order == 'x' || *order == 'X'){
end=0;
}
if(*order == 'z' || *order == 'Z'){
system ("CLS");
free(Total_Order);
free(order);
goto start; // Sprung zu start:
}
n++;
Total_Order = (char*)realloc(Total_Order, n * sizeof(char));
}while (end== 1);
float t=0.0;
int i=0;
printf("Finished Order:\n");
for (i = 0; i < n; ++i) {
switch (Total_Order[i]) {
case 'a':
printf("A ,,Big Burge 4.90EUR \n");
Total_Order[n-1]='A';
t = t + A;
break;
case 'b':
printf("B ,,Little Burger 1.90EUR \n");
Total_Order[n-1]='B';
t = t + B;
break;
case 'c':
printf("C Wrap 4.90EUR \n");
Total_Order[n-1]='C';
t = t + C;
break;
case 'd':
printf("D Salat 2.90EUR \n");
Total_Order[n-1]='D';
t = t + D;
break;
case 'e':
printf("E Frites 1.90EUR \n");
Total_Order[n-1]='E';
t = t + E;
break;
case 'f':
printf("F Softdrink 1.90EUR \n");
Total_Order[n-1]='F';
t = t + F;
break;
case 'g':
Total_Order[n-1]='G';
printf("G Watter 1.20EUR \n");
t = t + G;
break;
case 'h':
Total_Order[n-1]='H';
printf("H Ketchup 0.30EUR \n");
t = t + H;
break;
default:
printf(" ");
t = t + 0.0;
break;
}
}
printf("Summe %f",t);
free(Total_Order);
free(order);
return 0;
}
#include <stdio.h> // Standard Input / Output
#include <stdlib.h> //Zur Umwandlung von Zahlen, für Speicherverwaltung und ähnliche Aufgaben
#include <ctype.h> //Einzelne Zeichen überprüfen und umwandeln
#include <conio.h> // Konsole Input / Output getch
int main()
{
char *order; //Zeiger-Deklaration Bestellungen
char *Total_Order; //Zeiger-Deklaration Bestellungen Gesamt
int end = 1;
// goto = schlecht für Performance!!! Ersatz dafür?
start: //Festlegung goto Label, bei Bestellabbruch.
order=(char*)malloc(1*sizeof(char));
Total_Order = (char*)calloc(1, sizeof(char));
// float für Kommazahl, Variable entspricht Preis vom Essen.
float A=4.90 ,B=1.90 ,C=4.90 ,D=2.90 ,E=1.90 ,F=1.90 ,G=1.20 , H=0.30;
//Fragen: Euro-Zeichen als € Symbol
printf("Kundenbestellung:\n");
printf(" A Big Burger 4.90EUR \n B Little Burger 1.90EUR \n C Wrap 4.90EUR \n D Salat 2.90EUR \n E Frites 1.90EUR \n F Softdrink 1.90EUR \n G Water 1.20EUR \n H Ketchup 0.30EUR \n");
int n=1;
do {
scanf(" %c",order);
//printf("%c\n",*order);
if(n==1){
printf("Bestelleingabe:\n");
}
char temp=*order;
temp=tolower(temp);
switch (temp) {
case 'a':
printf("A Big Burge 4.90EUR \n");
Total_Order[n-1]='a';
break;
case 'b':
printf("B Little Burger 1.90EUR \n");
Total_Order[n-1]='b';
break;
case 'c':
printf("C Wrap 4.90EUR \n");
Total_Order[n-1]='c';
break;
case 'd':
printf("D Salat 2.90EUR \n");
Total_Order[n-1]='d';
break;
case 'e':
printf("E Frites 1.90EUR \n");
Total_Order[n-1]='e';
break;
case 'f':
printf("F Softdrink 1.90EUR \n");
Total_Order[n-1]='f';
break;
case 'g':
Total_Order[n-1]='g';
printf("G Watter 1.20EUR \n");
break;
case 'h':
Total_Order[n-1]='h';
printf("H Ketchup 0.30EUR \n");
break;
default:
printf(" ");
break;
}
if(*order == 'x' || *order == 'X'){
end=0;
}
if(*order == 'z' || *order == 'Z'){
system ("CLS");
free(Total_Order);
free(order);
goto start; // Sprung zu start:
}
n++;
Total_Order = (char*)realloc(Total_Order, n * sizeof(char));
}while (end== 1);
float t=0.0;
int i=0;
printf("Abgeschlossene Bestellung:\n");
for (i = 0; i < n; ++i) {
switch (Total_Order[i]) {
case 'a':
printf("A ,,Big Burge 4.90EUR \n");
Total_Order[n-1]='A';
t = t + A;
break;
case 'b':
printf("B ,,Little Burger 1.90EUR \n");
Total_Order[n-1]='B';
t = t + B;
break;
case 'c':
printf("C Wrap 4.90EUR \n");
Total_Order[n-1]='C';
t = t + C;
break;
case 'd':
printf("D Salat 2.90EUR \n");
Total_Order[n-1]='D';
t = t + D;
break;
case 'e':
printf("E Frites 1.90EUR \n");
Total_Order[n-1]='E';
t = t + E;
break;
case 'f':
printf("F Softdrink 1.90EUR \n");
Total_Order[n-1]='F';
t = t + F;
break;
case 'g':
Total_Order[n-1]='G';
printf("G Watter 1.20EUR \n");
t = t + G;
break;
case 'h':
Total_Order[n-1]='H';
printf("H Ketchup 0.30EUR \n");
t = t + H;
break;
default:
printf(" ");
t = t + 0.0;
break;
}
}
printf("Summe %f",t);
free(Total_Order);
free(order);
return 0;
}
Я надеюсь, у вас есть несколько советов для меня. Спасибо.
** Будет ли более простой и чистый способ для моего инструмента? ** Как я могу сделать так, чтобы название еды и цена менялись проще? ****