fork download
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int i, j;
  6. long dec; /* ให้รับค่าอินพุทแบบ Long Integer - เลขจำนวนเต็มแบบยาว */
  7. int bit[32]; /* จองพื้นที่ในการเก็บข้อมูลเลขฐาน 2 ลงใน Array */
  8.  
  9. clrscr(); /* เคลียร์หน้าจอ */
  10. printf("Decimal Number : "); /* แจ้งผู้ใช้เพื่อเตรียมป้อนค่าเลขฐาน 10 */
  11. scanf("%ld", &dec); /* ต้องใช้ ld เพราะ Input มันเป็นแบบ Long Integer */
  12. i = 0; /* กำหนดค่าเริ่มต้นของ Array */
  13. /* ทำตามที่ได้ออกแบบโปรแกรมเอาไว้ ... ยังไงยังงั้นเลย 55555+ */
  14. do {
  15. bit[i++] = dec % 2; /* การหารเอาเศษ เพื่อให้เป็นคำตอบ */
  16.  
  17. /* การหารทั่วไป แต่ตัวแปร dec ของภาษา C มันเป็น Integer หรือ เลขจำนวนเต็ม */
  18. /* ดังนั้นมันจึงตัดเศษ (หรือทศนิยม) ทิ้งไปโดยอัตโนมัติ */
  19. dec = dec / 2;
  20.  
  21. } while (dec > 0); /* เงื่อนไขที่ทำจนกระทั่ง dec = 0 ก็ออกจากวังวนเงื่อนไข */
  22.  
  23. /* การแสดงผลของการแปลงเลขฐาน 10 เป็นเลขฐาน 2*/
  24. /* j = i - 1 และให้ j ลดค่าลงทีละ 1 ... ก็คืออ่านข้อมูลถอยหลังกลับเท่านั้นเองครับ */
  25. /* เพราะตัวแปรแบบ Array ในภาษา C มันเก็บข้อมูลจากซ้ายไปขวา */
  26. /* ทำให้ LSB มันไปอยู่ทางซ้าย ส่วน MSB มันไปอยู่ทางขวา */
  27. for(j = i - 1; j >= 0; j--)
  28. printf("%d", bit[j]);
  29.  
  30. printf("\n");
  31. return 0;
  32.  
  33. }
Success #stdin #stdout 0.03s 25980KB
stdin
#include <stdio.h>
#include <stdlib.h>

#define MAX 100

struct Budget {
    char type[20];
    float amount;
};

struct Budget incomes[MAX];
struct Budget expenses[MAX];

int incomeCount = 0;
int expenseCount = 0;

// เพิ่มรายรับ
void addIncome() {
    printf("Enter income type: ");
    scanf("%s", incomes[incomeCount].type);

    printf("Enter amount: ");
    scanf("%f", &incomes[incomeCount].amount);

    incomeCount++;
}

// เพิ่มรายจ่าย
void addExpense() {
    printf("Enter expense type: ");
    scanf("%s", expenses[expenseCount].type);

    printf("Enter amount: ");
    scanf("%f", &expenses[expenseCount].amount);

    expenseCount++;
}

// คำนวณรายรับรวม
float totalIncome() {
    float total = 0;
    for (int i = 0; i < incomeCount; i++) {
        total += incomes[i].amount;
    }
    return total;
}

// คำนวณรายจ่ายรวม
float totalExpense() {
    float total = 0;
    for (int i = 0; i < expenseCount; i++) {
        total += expenses[i].amount;
    }
    return total;
}

// แสดงงบประมาณ
void showBudget() {
    printf("\n===== BUDGET REPORT =====\n");

    printf("Total Income: %.2f\n", totalIncome());
    printf("Total Expense: %.2f\n", totalExpense());
    printf("Balance: %.2f\n", totalIncome() - totalExpense());

    printf("\n--- Expenses Detail ---\n");
    for (int i = 0; i < expenseCount; i++) {
        printf("%s : %.2f\n",
               expenses[i].type,
               expenses[i].amount);
    }
}

// บันทึกไฟล์
void saveFile() {
    FILE *fp = fopen("budget.txt", "w");

    fprintf(fp, "%d\n", incomeCount);
    for (int i = 0; i < incomeCount; i++) {
        fprintf(fp, "%s %f\n",
                incomes[i].type,
                incomes[i].amount);
    }

    fprintf(fp, "%d\n", expenseCount);
    for (int i = 0; i < expenseCount; i++) {
        fprintf(fp, "%s %f\n",
                expenses[i].type,
                expenses[i].amount);
    }

    fclose(fp);
}

// โหลดไฟล์
void loadFile() {
    FILE *fp = fopen("budget.txt", "r");
    if (fp == NULL) return;

    fscanf(fp, "%d", &incomeCount);
    for (int i = 0; i < incomeCount; i++) {
        fscanf(fp, "%s %f",
               incomes[i].type,
               &incomes[i].amount);
    }

    fscanf(fp, "%d", &expenseCount);
    for (int i = 0; i < expenseCount; i++) {
        fscanf(fp, "%s %f",
               expenses[i].type,
               &expenses[i].amount);
    }

    fclose(fp);
}

// เมนู
void menu() {
    printf("\n===== BUDGET SYSTEM =====\n");
    printf("1. Add Income\n");
    printf("2. Add Expense\n");
    printf("3. Show Report\n");
    printf("4. Save\n");
    printf("5. Exit\n");
}

// main
int main() {
    int choice;

    loadFile();

    while (1) {
        menu();
        printf("Choose: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1: addIncome(); break;
            case 2: addExpense(); break;
            case 3: showBudget(); break;
            case 4: saveFile(); break;
            case 5:
                saveFile();
                printf("Exit...\n");
                exit(0);
            default:
                printf("Invalid\n");
        }
    }

    return 0;
}
stdout
#include <stdio.h>

int main(void)
{
int i, j;
long dec;  /* ให้รับค่าอินพุทแบบ Long Integer - เลขจำนวนเต็มแบบยาว */
int bit[32];  /* จองพื้นที่ในการเก็บข้อมูลเลขฐาน 2 ลงใน Array */

    clrscr();  /* เคลียร์หน้าจอ */
    printf("Decimal Number : ");  /* แจ้งผู้ใช้เพื่อเตรียมป้อนค่าเลขฐาน 10 */
    scanf("%ld", &dec);  /* ต้องใช้ ld เพราะ Input มันเป็นแบบ Long Integer */
    i = 0;  /* กำหนดค่าเริ่มต้นของ Array */
    /* ทำตามที่ได้ออกแบบโปรแกรมเอาไว้ ... ยังไงยังงั้นเลย 55555+ */
    do {
        bit[i++] = dec % 2;  /* การหารเอาเศษ เพื่อให้เป็นคำตอบ */

        /* การหารทั่วไป แต่ตัวแปร dec ของภาษา C มันเป็น Integer หรือ เลขจำนวนเต็ม */
        /* ดังนั้นมันจึงตัดเศษ (หรือทศนิยม) ทิ้งไปโดยอัตโนมัติ */
        dec = dec / 2;

    } while (dec > 0);  /* เงื่อนไขที่ทำจนกระทั่ง dec = 0 ก็ออกจากวังวนเงื่อนไข */

    /* การแสดงผลของการแปลงเลขฐาน 10 เป็นเลขฐาน 2*/
    /* j = i - 1 และให้ j ลดค่าลงทีละ 1 ... ก็คืออ่านข้อมูลถอยหลังกลับเท่านั้นเองครับ */
    /* เพราะตัวแปรแบบ Array ในภาษา C มันเก็บข้อมูลจากซ้ายไปขวา */
    /* ทำให้ LSB มันไปอยู่ทางซ้าย ส่วน MSB มันไปอยู่ทางขวา */
    for(j = i - 1; j >= 0; j--)
        printf("%d", bit[j]);

printf("\n");
return 0;

}