What's new

Closed Pa help po mga Lodi ng C language dyan!

Status
Not open for further replies.

Morgado2017

Addict
Joined
Aug 5, 2019
Posts
95
Reaction
9
Points
80
Patulong po kung bakit dumideretsyo syang mag print ng "Are you done" without executing first the "gets(memo[counter;])" ang gusto ko pong mangyare is mag wawait muna sya na matapos mag type ng kung ano ung user bago lalabas yang confirmation message nayan.

Final project po namin para sa 1st sem, 1st year IT student po ako sana matulungan nyo ako
 

Attachments

Please palagay po dito ung code para mabilis na madedebug ng mga kapc natin

Thanks

C:
int option;
    int counter = 0;
    char memo[5][500];

    char name[30];
    printf("Enter you name: ");
    scanf("%s", &name);
    do{
        printf("\n-------------------------\n");
        printf("Hello, %s would you like to: \n\n", name);
        printf("Type [1] to Add Memo\n");
        printf("Type [2] to View Memo: (Memo[%d])\n", counter + 1);
        printf("type [3] to Exit \n");
        printf("-------------------------\n\n");
        scanf("%d", &option);

        if(option == 1){
            if(counter != 5){
                int choice = 0;
                while(choice != 2){
                    printf("\n-------------------------\n");
                    printf("Enter your Memo[%d]: (500 characters only)\n", counter + 1);
                    gets(memo[counter]);
                    printf("Are you done? Type: [1]:No [2]:Yes \n");
                    scanf("%d", &choice);
                }
                counter++;
            }else{
                printf("You used all your memo! (5/5)");
            }
        }else if(option == 2){
            printf("\n-------------------------\n");
            printf("Your saved Memo: \n");
            int i;
            for(i = 0; i < 5; i++){
                printf("Memo[%d]: ", i + 1);
                printf("%s \n", memo[i]);
            }
        }else if(option == 3){
            printf("Exiting . . .");
        }else{
            printf("Invalid value.\n");
        }

    }while(option != 3);
 
Kase nung mag-scanf ka sa block na ito, yung '\n' is still on the buffer.

C:
        printf("Type [2] to View Memo: (Memo[%d])\n", counter + 1);
        printf("type [3] to Exit \n");
        printf("-------------------------\n\n");
        scanf("%d", &option);
....

You can try to flush it out by adding getchar after the scanf call such as:
C:
 scanf("%d", &option);
getchar();

Pero sa tingin ko madaming dapat i-improve sa code mo. Like AVOID gets(). It is unsafe. Try to use fgets() instead. Tapos you can convert sa switch block yung if-statements.
 
Kase nung mag-scanf ka sa block na ito, yung '\n' is still on the buffer.

C:
        printf("Type [2] to View Memo: (Memo[%d])\n", counter + 1);
        printf("type [3] to Exit \n");
        printf("-------------------------\n\n");
        scanf("%d", &option);
....

You can try to flush it out by adding getchar after the scanf call such as:
C:
scanf("%d", &option);
getchar();

Pero sa tingin ko madaming dapat i-improve sa code mo. Like AVOID gets(). It is unsafe. Try to use fgets() instead. Tapos you can convert sa switch block yung if-statements.

salamat boss anlaking tulong neto medyo d ko na gets kung bakit na fix sya gamit ang getchar() and also di napo ko lalayo sa gets() kase di panaman natuturo to samen ...

C:
int option;
    int counter = 0;
    char memo[5][500];

    char name[30];
    printf("Enter you name: ");
    scanf("%s", &name);
    do{
        printf("\n-------------------------\n");
        printf("Hello, %s would you like to: \n\n", name);
        printf("Type [1] to Add Memo\n");
        printf("Type [2] to View Memo: (Memo[%d])\n", counter + 1);
        printf("type [3] to Exit \n");
        printf("-------------------------\n\n");
        scanf("%d", &option);
        getchar();

        switch(option){
            case 1:
                if(counter != 5){
                    int choice = 0;
                    while(choice != 2){
                        printf("\n-------------------------\n");
                        printf("Enter your Memo[%d]: (500 characters only)\n", counter + 1);
                        gets(memo[counter]);
                        printf("Are you done? Type: [1]:No [2]:Yes \n");
                        scanf("%d", &choice);
                    }
                counter++;
                }else{
                printf("You used all your memo! (5/5)");
                }
            break;

            case 2:
                printf("\n-------------------------\n");
                printf("Your saved Memo: \n");
                int i;
                for(i = 0; i < 5; i++){
                    printf("Memo[%d]: ", i + 1);
                    printf("%s \n", memo[i]);
                }
            break;

            case 3:
                printf("Exiting . . .");
            break;

            default:
                printf("Invalid value.\n");
            break;
        }
    }while(option != 3);

eto napo ung bagong code ko pinalitan konarin sa switch laking tulong mas madaling tingnan sya sken..
now ang problema ko nmn po is pag ka run ko ng program ko at dumeretso ako sa view memo ko kahit na wala pang ako nilalagay sa limang memo ko eto po ang lumalabas may mga special characters kagad na nakasave.

Your saved Memo:
Memo[1]:
Memo[2]:
Memo[3]:
Memo[4]: ñUÇw
Memo[5]:

maraming salamat po ulet sa tulong :D
 
salamat boss anlaking tulong neto medyo d ko na gets kung bakit na fix sya gamit ang getchar() and also di napo ko lalayo sa gets() kase di panaman natuturo to samen ...

C:
int option;
    int counter = 0;
    char memo[5][500];

    char name[30];
    printf("Enter you name: ");
    scanf("%s", &name);
    do{
        printf("\n-------------------------\n");
        printf("Hello, %s would you like to: \n\n", name);
        printf("Type [1] to Add Memo\n");
        printf("Type [2] to View Memo: (Memo[%d])\n", counter + 1);
        printf("type [3] to Exit \n");
        printf("-------------------------\n\n");
        scanf("%d", &option);
        getchar();

        switch(option){
            case 1:
                if(counter != 5){
                    int choice = 0;
                    while(choice != 2){
                        printf("\n-------------------------\n");
                        printf("Enter your Memo[%d]: (500 characters only)\n", counter + 1);
                        gets(memo[counter]);
                        printf("Are you done? Type: [1]:No [2]:Yes \n");
                        scanf("%d", &choice);
                    }
                counter++;
                }else{
                printf("You used all your memo! (5/5)");
                }
            break;

            case 2:
                printf("\n-------------------------\n");
                printf("Your saved Memo: \n");
                int i;
                for(i = 0; i < 5; i++){
                    printf("Memo[%d]: ", i + 1);
                    printf("%s \n", memo[i]);
                }
            break;

            case 3:
                printf("Exiting . . .");
            break;

            default:
                printf("Invalid value.\n");
            break;
        }
    }while(option != 3);

eto napo ung bagong code ko pinalitan konarin sa switch laking tulong mas madaling tingnan sya sken..
now ang problema ko nmn po is pag ka run ko ng program ko at dumeretso ako sa view memo ko kahit na wala pang ako nilalagay sa limang memo ko eto po ang lumalabas may mga special characters kagad na nakasave.

Your saved Memo:
Memo[1]:
Memo[2]:
Memo[3]:
Memo[4]: ñUÇw
Memo[5]:

maraming salamat po ulet sa tulong :D
Kase kapag hindi mo in-initialize yung any variable (eg, array elements), they contain random garbage. Try to initialize your array (kung supported ng compiler mo, like gcc):

Code:
char memo[5][500] = {};
 
Status
Not open for further replies.
Back
Top