enjeru
enjeru

Reputation: 55

how to show a word in char?

First, the program wants you to enter the student name. When I want to show the student's name in the bottom with %s, xcode always tells me to replace with %c. Can you give me the solutions how to show the student name as it was entered, not using %c? Thank you.

#include <stdio.h>

void showthelastvalue () {
    char name1, name2, name3, name4;
    int value1a, value1b, value1c, value1d;
    int value2a, value2b, value2c, value2d;
    int value3a, value3b, value3c, value3d;
    int value4a, value4b, value4c, value4d;

    printf("\nenter student name-1 : ");
    scanf(" %s", name1);
    printf("enter student name-2 : ");
    scanf(" %s", name2);
    printf("enter student name-3 : ");
    scanf(" %s", name3);
    printf("enter student name-4 : ");
    scanf(" %s", name4);

    printf("\nEnter student grade-1 %s\n", name1);

    printf("grade ke 1 : ");
    scanf("%d", &grade1a);

    printf("grade ke 2 : ");
    scanf("%d", &grade1b);

    printf("grade ke 3 : ");
    scanf("%d", &grade1c);

    printf("grade ke 4 : ");
    scanf("%d", &grade1d);

    printf("\nEnter student grade- 2 %s\n", name2);

    printf("grade ke 1 : ");
    scanf("%d", &grade2a);

    printf("grade ke 2 : ");
    scanf("%d", &grade2b);

    printf("grade ke 3 : ");
    scanf("%d", &grade2c);

    printf("grade ke 4 : ");
    scanf("%d", &grade2d);

    printf("\nEnter student grade- 3 %s\n", name3);

    printf("grade ke 1 : ");
    scanf("%d", &grade3a);

    printf("grade ke 2 : ");
    scanf("%d", &grade3b);

    printf("grade ke 3 : ");
    scanf("%d", &grade3c);

    printf("grade ke 4 : ");
    scanf("%d", &grade3d);

    printf("\nEnter student grade- 4 %s\n", name4);

    printf("grade ke 1 : ");
    scanf("%d", &grade4a);

    printf("grade ke 2 : ");
    scanf("%d", &grade4b);

    printf("grade ke 3 : ");
    scanf("%d", &grade4c);

    printf("grade ke 4 : ");
    scanf("%d", &grade4d);

    printf("\nThe grade of 4 students: \n");
    printf(" %s %d %d %d %d\n", name1, grade1a, grade1b, grade1c, grade1d);
    printf(" %s %d %d %d %d\n", name2, grade1a, grade1b, grade1c, grade1d);
    printf(" %s %d %d %d %d\n", name3, grade1a, grade1b, grade1c, grade1d);
    printf(" %s %d %d %d %d\n", name4, grade1a, grade1b, grade1c, grade1d);

    averange1 = (grade1a + grade1b + grade1c + grade1d) / 4;
    averange2 = (grade2a + grade2b + grade2c + grade2d) / 4;
    averange3 = (grade3a + grade3b + grade3c + grade3d) / 4;
    averange4 = (grade4a + grade4b + grade4c + grade4d) / 4;

    printf("Last grade of 4 studentsgra :\n");
    printf("Last grade from student1 %s = %d\n", name1, averange1);
    printf("Last grade from student2 %s = %d\n", name2, averange2);
    printf("Last grade from student3 %s = %d\n", name3, averange3);

    printf("Last grade from student4 %s = %d\n", name4, averange4);
}

int main() {
    int choose;

    printf("Welcome!\n");


    do {
        printf("Choose anda :\n");
        printf("1. Show the last grade\n");
        printf("2. Show the grade\n");
        printf("3. Show the Table\n");
        printf("4. Exit\n");
        printf("\nWhat will you choose ? ");
        scanf("%d", &choose);

        switch (choose) {
            case 1:
                showthelastgrade ();
                break;

            case 4:
                printf("Thank you /001\n");
                break;
        }

    }
    while (choose != 5);
    return 0;
}

Upvotes: 0

Views: 145

Answers (4)

user3410837
user3410837

Reputation:

You are using char name1,name2,name3,name4 replace it with

char name1[N],name2[N],name3[N],name4[N]

then use %s instead of %c.

and then use gets() function instead of using scanf() function.

then try it i hope it will run perfectly.

Upvotes: 0

Farrukh
Farrukh

Reputation: 91

I have not looked into the logic of your program but make the following amendments and it should work fine.

#include <stdio.h>

//The maximum allowed name size, you can change it to whatever you want
#define MAX 10

void showthelastvalue () {
    char name1[MAX], name2[MAX], name3[MAX], name4[MAX]; 
    //You need character arrays here, simple char would store only a single byte

    int value1a, value1b, value1c, value1d;
    int value2a, value2b, value2c, value2d;
    int value3a, value3b, value3c, value3d;
    int value4a, value4b, value4c, value4d;

    printf("insert student name 1 : ");
    gets(name1);  //scanf(" %s", &name1);
    printf("insert student name 2 : ");
    gets(name2);  //scanf(" %s", &name2);
    printf("insert student name 3 : ");
    gets(name3);  //scanf(" %s", &name3);
    printf("insert student name 4 : ");
    gets(name4);  //scanf(" %s", &name4);

    printf("Insert student value-1 %c\n", name1);

    printf("value ke 1 : ");
    scanf("%d", &value1a);

    printf("value ke 2 : ");
    scanf("%d", &value1b);

    printf("value ke 3 : ");
    scanf("%d", &value1c);

    printf("value ke 4 : ");
    scanf("%d", &value1d);

    printf("Insert student value- 2 %c\n", name2);

    printf("value ke 1 : ");
    scanf("%d", &value2a);

    printf("value ke 2 : ");
    scanf("%d", &value2b);

    printf("value ke 3 : ");
    scanf("%d", &value2c);

    printf("value ke 4 : ");
    scanf("%d", &value2d);

    printf("Insert student value- 3 %c\n", name3);

    printf("value ke 1 : ");
    scanf("%d", &value3a);

    printf("value ke 2 : ");
    scanf("%d", &value3b);

    printf("value ke 3 : ");
    scanf("%d", &value3c);

    printf("value ke 4 : ");
    scanf("%d", &value3d);

    printf("Insert student value- 4 %c\n", name4);

    printf("value ke 1 : ");
    scanf("%d", &value4a);

    printf("value ke 2 : ");
    scanf("%d", &value4b);

    printf("value ke 3 : ");
    scanf("%d", &value4c);

    printf("value ke 4 : ");
    scanf("%d", &value4d);                

    printf("Jadi value dari 4 mahasiswa sbb : \n");
    printf(" %s %d %d %d %d", name1, value1a, value1b, value1c, value1d);
    printf(" %s %d %d %d %d", name2, value1a, value1b, value1c, value1d);
    printf(" %s %d %d %d %d", name3, value1a, value1b, value1c, value1d);
    printf(" %s %d %d %d %d", name4, value1a, value1b, value1c, value1d);
}

int main() {
    int choose;

    printf("Welcome!\n");

    do {
    printf("Choose anda :\n");
    printf("1. Show the last value\n");
    printf("2. Show Grade\n");
    printf("3. Show the Table\n");
    printf("4. Exit\n");
    printf("What you will choose ? ");
    scanf("%d", &choose);

        switch (choose) {
            case 1:
                showthelastvalue();
                break;

            case 4:
                printf("Thank you /001\n");
                break;
        }

    }
    while (choose != 5);
    return 0; 
}

Some explanation to what you did wrong: You had defined the variables as 'char' which would mean that your program is expecting a single byte. Also, use 'gets()' function instead of using scanf to store strings. '%s' only works with character arrays in printf.

Upvotes: 0

Tom Fenech
Tom Fenech

Reputation: 74685

You are reading the names into single chars, which is why xcode is giving you that message. You need to use an array of chars.

The simplest way to do this would be to just change your declarations to:

char name1[N], name2[N], name3[N], name4[N];

where N is the maximum length a name can be.

You would then change all the scanf to be like:

scanf(" %s", name1); // & removed

as name1 etc. now point to the start of the char arrays.

Note that this is inherently a risky thing to do, as it means that the buffer can be overflown by inputting a name that is too long.

You would be better off using fgets, as it allows you to specify the maximum length of the buffer:

fgets(name1, N, stdin);

Anything longer than N-1 characters will be discarded, rather than overflowing your buffer.

Upvotes: 2

Anoop Vaidya
Anoop Vaidya

Reputation: 46543

To print a char you use %c.

To print a string or array-of-char you use %s


You can use array of char char name[30] or char pointer char *name, and then use %s to print.

Upvotes: 0

Related Questions