fork download
  1. #include <stdio.h> // นำเข้าไลบรารีมาตรฐานสำหรับฟังก์ชัน input/output เช่น printf() และ scanf()
  2.  
  3. #define MENU_ITEMS 10 // กำหนดค่าคงที่ MENU_ITEMS เป็น 10 แทนจำนวนเมนูเครื่องดื่ม
  4. #define TOPPING_ITEMS 5 // กำหนดค่าคงที่ TOPPING_ITEMS เป็น 5 แทนจำนวนท็อปปิ้ง
  5. #define SIZE_OPTIONS 3 // กำหนดค่าคงที่ SIZE_OPTIONS เป็น 3 แทนจำนวนขนาดแก้ว
  6.  
  7. // อาร์เรย์ที่เก็บชื่อเมนูเครื่องดื่ม
  8. const char *menu[MENU_ITEMS] = {
  9. "ชานม", "ชาเขียว", "ชาไทย", "โกโก้", "มัทฉะ",
  10. "เผือก", "นมสด", "กาแฟ", "นมชมพู", "น้ำผึ้งมะนาว"
  11. };
  12. // อาร์เรย์ที่เก็บราคาของเมนูเครื่องดื่มแต่ละรายการ
  13. const int menu_prices[MENU_ITEMS] = {30, 30, 35, 40, 45, 35, 30, 40, 30, 35};
  14.  
  15. // อาร์เรย์ที่เก็บชื่อท็อปปิ้ง
  16. const char *toppings[TOPPING_ITEMS] = {"ไข่มุก", "วุ้นมะพร้าว", "เฉาก๊วย", "พุดดิ้ง", "ถั่วแดง"};
  17. // อาร์เรย์ที่เก็บราคาของท็อปปิ้งแต่ละรายการ
  18. const int topping_prices[TOPPING_ITEMS] = {5, 5, 5, 10, 10};
  19.  
  20. // อาร์เรย์ที่เก็บชื่อขนาดแก้ว
  21. const char *sizes[SIZE_OPTIONS] = {"เล็ก", "กลาง", "ใหญ่"};
  22. // อาร์เรย์ที่เก็บราคาของแต่ละขนาดแก้ว
  23. const int size_prices[SIZE_OPTIONS] = {0, 5, 10};
  24.  
  25. // อาร์เรย์ที่เก็บชื่อระดับความหวาน
  26. const char *sweetness_levels[] = {"ไม่หวาน", "25%", "50%", "75%", "100%"};
  27.  
  28. // ฟังก์ชันสำหรับพิมพ์เส้นแบ่ง
  29. void print_line() {
  30. printf("------------------------------------------\n"); // พิมพ์เส้นแบ่ง
  31. }
  32.  
  33. // ฟังก์ชันสำหรับแสดงเมนูเครื่องดื่ม
  34. void print_menu() {
  35. print_line(); // พิมพ์เส้นแบ่ง
  36. printf("--- เมนูเครื่องดื่ม ---\n"); // แสดงหัวข้อเมนู
  37. for (int i = 0; i < MENU_ITEMS; i++) { // วนลูปเพื่อแสดงเมนูแต่ละรายการ
  38. printf("%d. %s (%d บาท)\n", i + 1, menu[i], menu_prices[i]); // แสดงหมายเลข, ชื่อเมนู, และราคา
  39. }
  40. print_line(); // พิมพ์เส้นแบ่ง
  41. }
  42.  
  43. // ฟังก์ชันสำหรับแสดงขนาดแก้ว
  44. void print_sizes() {
  45. print_line(); // พิมพ์เส้นแบ่ง
  46. printf("--- ขนาดแก้ว ---\n"); // แสดงหัวข้อขนาดแก้ว
  47. for (int i = 0; i < SIZE_OPTIONS; i++) { // วนลูปเพื่อแสดงขนาดแก้วแต่ละรายการ
  48. printf("%d. %s (+%d บาท)\n", i + 1, sizes[i], size_prices[i]); // แสดงหมายเลข, ชื่อขนาด, และราคาเพิ่ม
  49. }
  50. print_line(); // พิมพ์เส้นแบ่ง
  51. }
  52.  
  53. // ฟังก์ชันสำหรับแสดงระดับความหวาน
  54. void print_sweetness_levels() {
  55. print_line(); // พิมพ์เส้นแบ่ง
  56. printf("--- ระดับความหวาน ---\n"); // แสดงหัวข้อระดับความหวาน
  57. for (int i = 0; i < 5; i++) { // วนลูปเพื่อแสดงระดับความหวานแต่ละรายการ
  58. printf("%d. %s\n", i + 1, sweetness_levels[i]); // แสดงหมายเลขและระดับความหวาน
  59. }
  60. print_line(); // พิมพ์เส้นแบ่ง
  61. }
  62.  
  63. // ฟังก์ชันสำหรับแสดงท็อปปิ้ง
  64. void print_toppings() {
  65. print_line(); // พิมพ์เส้นแบ่ง
  66. printf("--- ท็อปปิ้ง ---\n"); // แสดงหัวข้อท็อปปิ้ง
  67. for (int i = 0; i < TOPPING_ITEMS; i++) { // วนลูปเพื่อแสดงท็อปปิ้งแต่ละรายการ
  68. printf("%d. %s (+%d บาท)\n", i + 1, toppings[i], topping_prices[i]); // แสดงหมายเลข, ชื่อท็อปปิ้ง, และราคาเพิ่ม
  69. }
  70. print_line(); // พิมพ์เส้นแบ่ง
  71. }
  72.  
  73. // ฟังก์ชันสำหรับพิมพ์ใบเสร็จ
  74. void print_receipt(int menu_choice, int size_choice, int sweetness_choice, int topping_count, int total_price) {
  75. print_line(); // พิมพ์เส้นแบ่ง
  76. printf("\n--- สรุปรายการสั่งซื้อ ---\n"); // แสดงหัวข้อใบเสร็จ
  77. printf("เครื่องดื่ม: %s\n", menu[menu_choice]); // แสดงชื่อเครื่องดื่มที่เลือก
  78. printf("ขนาด: %s\n", sizes[size_choice]); // แสดงขนาดแก้วที่เลือก
  79. printf("ระดับความหวาน: %s\n", sweetness_levels[sweetness_choice]); // แสดงระดับความหวานที่เลือก
  80. printf("ท็อปปิ้ง %d รายการ\n", topping_count); // แสดงจำนวนท็อปปิ้งที่เลือก
  81. printf("ราคาสุทธิ: %d บาท\n", total_price); // แสดงราคารวม
  82. print_line(); // พิมพ์เส้นแบ่ง
  83. printf("ขอบคุณที่ใช้บริการ!\n"); // แสดงข้อความขอบคุณ
  84. }
  85.  
  86. // ฟังก์ชันหลักของโปรแกรม
  87. int main() {
  88. // ประกาศตัวแปรเพื่อเก็บข้อมูลการเลือกของผู้ใช้
  89. int menu_choice, size_choice, sweetness_choice, topping_choice, topping_count = 0;
  90. int total_price = 0; // ประกาศตัวแปรสำหรับเก็บราคารวม
  91. char add_more; // ประกาศตัวแปรสำหรับเก็บคำตอบว่าต้องการเพิ่มท็อปปิ้งหรือไม่
  92.  
  93. // แสดงเมนูเครื่องดื่ม
  94. print_menu();
  95. // รับค่าเมนูจากผู้ใช้
  96. printf("เลือกเมนูเครื่องดื่ม (1-10): ");
  97. // ตรวจสอบการป้อนข้อมูลว่าเป็นตัวเลขและในช่วงที่ถูกต้อง (1-10)
  98. while (scanf("%d", &menu_choice) != 1 || menu_choice < 1 || menu_choice > 10) {
  99. while (getchar() != '\n'); // เคลียร์ buffer
  100. printf("กรุณาเลือกเมนูจาก 1 ถึง 10 เท่านั้น: ");
  101. }
  102. menu_choice--; // ลดค่าลง 1 เพื่อให้ตรงกับ index ในอาร์เรย์
  103. total_price += menu_prices[menu_choice]; // เพิ่มราคาเมนูลงในราคารวม
  104.  
  105. // แสดงขนาดแก้ว
  106. print_sizes();
  107. // รับค่าขนาดแก้วจากผู้ใช้
  108. printf("เลือกขนาดแก้ว (1-3): ");
  109. // ตรวจสอบการป้อนข้อมูลว่าเป็นตัวเลขและในช่วงที่ถูกต้อง (1-3)
  110. while (scanf("%d", &size_choice) != 1 || size_choice < 1 || size_choice > 3) {
  111. while (getchar() != '\n'); // เคลียร์ buffer
  112. printf("กรุณาเลือกขนาดแก้วจาก 1 ถึง 3 เท่านั้น: ");
  113. }
  114. size_choice--; // ลดค่าลง 1 เพื่อให้ตรงกับ index ในอาร์เรย์
  115. total_price += size_prices[size_choice]; // เพิ่มราคาขนาดแก้วลงในราคารวม
  116.  
  117. // แสดงระดับความหวาน
  118. print_sweetness_levels();
  119. // รับค่าระดับความหวานจากผู้ใช้
  120. printf("เลือกระดับความหวาน (1-5): ");
  121. // ตรวจสอบการป้อนข้อมูลว่าเป็นตัวเลขและในช่วงที่ถูกต้อง (1-5)
  122. while (scanf("%d", &sweetness_choice) != 1 || sweetness_choice < 1 || sweetness_choice > 5) {
  123. while (getchar() != '\n'); // เคลียร์ buffer
  124. printf("กรุณาเลือกระดับความหวานจาก 1 ถึง 5 เท่านั้น: ");
  125. }
  126. sweetness_choice--; // ลดค่าลง 1 เพื่อให้ตรงกับ index ในอาร์เรย์
  127.  
  128. // วนลูปสำหรับการเลือกท็อปปิ้ง
  129. do {
  130. // แสดงท็อปปิ้งที่เลือกได้
  131. print_toppings();
  132. // รับค่าท็อปปิ้งจากผู้ใช้
  133. printf("เลือกท็อปปิ้ง (1-5) หรือ 0 เพื่อข้าม: ");
  134. // ตรวจสอบการป้อนข้อมูลว่าเป็นตัวเลขและในช่วงที่ถูกต้อง (0-5)
  135. while (scanf("%d", &topping_choice) != 1 || topping_choice < 0 || topping_choice > 5) {
  136. while (getchar() != '\n'); // เคลียร์ buffer
  137. printf("กรุณาเลือกท็อปปิ้งจาก 0 ถึง 5 เท่านั้น: ");
  138. }
  139. // ถ้าผู้ใช้เลือกท็อปปิ้ง
  140. if (topping_choice > 0 && topping_choice <= TOPPING_ITEMS) {
  141. total_price += topping_prices[topping_choice - 1]; // เพิ่มราคาท็อปปิ้งลงในราคารวม
  142. topping_count++; // เพิ่มจำนวนท็อปปิ้ง
  143. printf("ต้องการเพิ่มอีกหรือไม่? (y/n): ");
  144. scanf(" %c", &add_more); // รับคำตอบว่าต้องการเพิ่มอีกหรือไม่
  145. } else {
  146. add_more = 'n'; // หากเลือก 0 ให้หยุดเพิ่มท็อปปิ้ง
  147. }
  148. } while (add_more == 'y'); // วนลูปถ้าผู้ใช้ต้องการเพิ่มท็อปปิ้งต่อ
  149.  
  150. // แสดงใบเสร็จสรุป
  151. print_receipt(menu_choice, size_choice, sweetness_choice, topping_count, total_price);
  152. return 0; // ส่งค่าผลลัพธ์กลับจากฟังก์ชัน main
  153. }
  154.  
Success #stdin #stdout 0.03s 26020KB
stdin
Standard input is empty
stdout
#include <stdio.h> // นำเข้าไลบรารีมาตรฐานสำหรับฟังก์ชัน input/output เช่น printf() และ scanf()

#define MENU_ITEMS 10 // กำหนดค่าคงที่ MENU_ITEMS เป็น 10 แทนจำนวนเมนูเครื่องดื่ม
#define TOPPING_ITEMS 5 // กำหนดค่าคงที่ TOPPING_ITEMS เป็น 5 แทนจำนวนท็อปปิ้ง
#define SIZE_OPTIONS 3 // กำหนดค่าคงที่ SIZE_OPTIONS เป็น 3 แทนจำนวนขนาดแก้ว

// อาร์เรย์ที่เก็บชื่อเมนูเครื่องดื่ม
const char *menu[MENU_ITEMS] = {
    "ชานม", "ชาเขียว", "ชาไทย", "โกโก้", "มัทฉะ",
    "เผือก", "นมสด", "กาแฟ", "นมชมพู", "น้ำผึ้งมะนาว"
};
// อาร์เรย์ที่เก็บราคาของเมนูเครื่องดื่มแต่ละรายการ
const int menu_prices[MENU_ITEMS] = {30, 30, 35, 40, 45, 35, 30, 40, 30, 35};

// อาร์เรย์ที่เก็บชื่อท็อปปิ้ง
const char *toppings[TOPPING_ITEMS] = {"ไข่มุก", "วุ้นมะพร้าว", "เฉาก๊วย", "พุดดิ้ง", "ถั่วแดง"};
// อาร์เรย์ที่เก็บราคาของท็อปปิ้งแต่ละรายการ
const int topping_prices[TOPPING_ITEMS] = {5, 5, 5, 10, 10};

// อาร์เรย์ที่เก็บชื่อขนาดแก้ว
const char *sizes[SIZE_OPTIONS] = {"เล็ก", "กลาง", "ใหญ่"};
// อาร์เรย์ที่เก็บราคาของแต่ละขนาดแก้ว
const int size_prices[SIZE_OPTIONS] = {0, 5, 10};

// อาร์เรย์ที่เก็บชื่อระดับความหวาน
const char *sweetness_levels[] = {"ไม่หวาน", "25%", "50%", "75%", "100%"};

// ฟังก์ชันสำหรับพิมพ์เส้นแบ่ง
void print_line() {
    printf("------------------------------------------\n"); // พิมพ์เส้นแบ่ง
}

// ฟังก์ชันสำหรับแสดงเมนูเครื่องดื่ม
void print_menu() {
    print_line(); // พิมพ์เส้นแบ่ง
    printf("--- เมนูเครื่องดื่ม ---\n"); // แสดงหัวข้อเมนู
    for (int i = 0; i < MENU_ITEMS; i++) { // วนลูปเพื่อแสดงเมนูแต่ละรายการ
        printf("%d. %s (%d บาท)\n", i + 1, menu[i], menu_prices[i]); // แสดงหมายเลข, ชื่อเมนู, และราคา
    }
    print_line(); // พิมพ์เส้นแบ่ง
}

// ฟังก์ชันสำหรับแสดงขนาดแก้ว
void print_sizes() {
    print_line(); // พิมพ์เส้นแบ่ง
    printf("--- ขนาดแก้ว ---\n"); // แสดงหัวข้อขนาดแก้ว
    for (int i = 0; i < SIZE_OPTIONS; i++) { // วนลูปเพื่อแสดงขนาดแก้วแต่ละรายการ
        printf("%d. %s (+%d บาท)\n", i + 1, sizes[i], size_prices[i]); // แสดงหมายเลข, ชื่อขนาด, และราคาเพิ่ม
    }
    print_line(); // พิมพ์เส้นแบ่ง
}

// ฟังก์ชันสำหรับแสดงระดับความหวาน
void print_sweetness_levels() {
    print_line(); // พิมพ์เส้นแบ่ง
    printf("--- ระดับความหวาน ---\n"); // แสดงหัวข้อระดับความหวาน
    for (int i = 0; i < 5; i++) { // วนลูปเพื่อแสดงระดับความหวานแต่ละรายการ
        printf("%d. %s\n", i + 1, sweetness_levels[i]); // แสดงหมายเลขและระดับความหวาน
    }
    print_line(); // พิมพ์เส้นแบ่ง
}

// ฟังก์ชันสำหรับแสดงท็อปปิ้ง
void print_toppings() {
    print_line(); // พิมพ์เส้นแบ่ง
    printf("--- ท็อปปิ้ง ---\n"); // แสดงหัวข้อท็อปปิ้ง
    for (int i = 0; i < TOPPING_ITEMS; i++) { // วนลูปเพื่อแสดงท็อปปิ้งแต่ละรายการ
        printf("%d. %s (+%d บาท)\n", i + 1, toppings[i], topping_prices[i]); // แสดงหมายเลข, ชื่อท็อปปิ้ง, และราคาเพิ่ม
    }
    print_line(); // พิมพ์เส้นแบ่ง
}

// ฟังก์ชันสำหรับพิมพ์ใบเสร็จ
void print_receipt(int menu_choice, int size_choice, int sweetness_choice, int topping_count, int total_price) {
    print_line(); // พิมพ์เส้นแบ่ง
    printf("\n--- สรุปรายการสั่งซื้อ ---\n"); // แสดงหัวข้อใบเสร็จ
    printf("เครื่องดื่ม: %s\n", menu[menu_choice]); // แสดงชื่อเครื่องดื่มที่เลือก
    printf("ขนาด: %s\n", sizes[size_choice]); // แสดงขนาดแก้วที่เลือก
    printf("ระดับความหวาน: %s\n", sweetness_levels[sweetness_choice]); // แสดงระดับความหวานที่เลือก
    printf("ท็อปปิ้ง %d รายการ\n", topping_count); // แสดงจำนวนท็อปปิ้งที่เลือก
    printf("ราคาสุทธิ: %d บาท\n", total_price); // แสดงราคารวม
    print_line(); // พิมพ์เส้นแบ่ง
    printf("ขอบคุณที่ใช้บริการ!\n"); // แสดงข้อความขอบคุณ
}

// ฟังก์ชันหลักของโปรแกรม
int main() {
    // ประกาศตัวแปรเพื่อเก็บข้อมูลการเลือกของผู้ใช้
    int menu_choice, size_choice, sweetness_choice, topping_choice, topping_count = 0;
    int total_price = 0; // ประกาศตัวแปรสำหรับเก็บราคารวม
    char add_more; // ประกาศตัวแปรสำหรับเก็บคำตอบว่าต้องการเพิ่มท็อปปิ้งหรือไม่

    // แสดงเมนูเครื่องดื่ม
    print_menu();
    // รับค่าเมนูจากผู้ใช้
    printf("เลือกเมนูเครื่องดื่ม (1-10): ");
    // ตรวจสอบการป้อนข้อมูลว่าเป็นตัวเลขและในช่วงที่ถูกต้อง (1-10)
    while (scanf("%d", &menu_choice) != 1 || menu_choice < 1 || menu_choice > 10) {
        while (getchar() != '\n'); // เคลียร์ buffer
        printf("กรุณาเลือกเมนูจาก 1 ถึง 10 เท่านั้น: ");
    }
    menu_choice--; // ลดค่าลง 1 เพื่อให้ตรงกับ index ในอาร์เรย์
    total_price += menu_prices[menu_choice]; // เพิ่มราคาเมนูลงในราคารวม

    // แสดงขนาดแก้ว
    print_sizes();
    // รับค่าขนาดแก้วจากผู้ใช้
    printf("เลือกขนาดแก้ว (1-3): ");
    // ตรวจสอบการป้อนข้อมูลว่าเป็นตัวเลขและในช่วงที่ถูกต้อง (1-3)
    while (scanf("%d", &size_choice) != 1 || size_choice < 1 || size_choice > 3) {
        while (getchar() != '\n'); // เคลียร์ buffer
        printf("กรุณาเลือกขนาดแก้วจาก 1 ถึง 3 เท่านั้น: ");
    }
    size_choice--; // ลดค่าลง 1 เพื่อให้ตรงกับ index ในอาร์เรย์
    total_price += size_prices[size_choice]; // เพิ่มราคาขนาดแก้วลงในราคารวม

    // แสดงระดับความหวาน
    print_sweetness_levels();
    // รับค่าระดับความหวานจากผู้ใช้
    printf("เลือกระดับความหวาน (1-5): ");
    // ตรวจสอบการป้อนข้อมูลว่าเป็นตัวเลขและในช่วงที่ถูกต้อง (1-5)
    while (scanf("%d", &sweetness_choice) != 1 || sweetness_choice < 1 || sweetness_choice > 5) {
        while (getchar() != '\n'); // เคลียร์ buffer
        printf("กรุณาเลือกระดับความหวานจาก 1 ถึง 5 เท่านั้น: ");
    }
    sweetness_choice--; // ลดค่าลง 1 เพื่อให้ตรงกับ index ในอาร์เรย์

    // วนลูปสำหรับการเลือกท็อปปิ้ง
    do {
        // แสดงท็อปปิ้งที่เลือกได้
        print_toppings();
        // รับค่าท็อปปิ้งจากผู้ใช้
        printf("เลือกท็อปปิ้ง (1-5) หรือ 0 เพื่อข้าม: ");
        // ตรวจสอบการป้อนข้อมูลว่าเป็นตัวเลขและในช่วงที่ถูกต้อง (0-5)
        while (scanf("%d", &topping_choice) != 1 || topping_choice < 0 || topping_choice > 5) {
            while (getchar() != '\n'); // เคลียร์ buffer
            printf("กรุณาเลือกท็อปปิ้งจาก 0 ถึง 5 เท่านั้น: ");
        }
        // ถ้าผู้ใช้เลือกท็อปปิ้ง
        if (topping_choice > 0 && topping_choice <= TOPPING_ITEMS) {
            total_price += topping_prices[topping_choice - 1]; // เพิ่มราคาท็อปปิ้งลงในราคารวม
            topping_count++; // เพิ่มจำนวนท็อปปิ้ง
            printf("ต้องการเพิ่มอีกหรือไม่? (y/n): ");
            scanf(" %c", &add_more); // รับคำตอบว่าต้องการเพิ่มอีกหรือไม่
        } else {
            add_more = 'n'; // หากเลือก 0 ให้หยุดเพิ่มท็อปปิ้ง
        }
    } while (add_more == 'y'); // วนลูปถ้าผู้ใช้ต้องการเพิ่มท็อปปิ้งต่อ

    // แสดงใบเสร็จสรุป
    print_receipt(menu_choice, size_choice, sweetness_choice, topping_count, total_price);
    return 0; // ส่งค่าผลลัพธ์กลับจากฟังก์ชัน main
}