Ошибка при печати значения символа из строки - PullRequest
0 голосов
/ 19 марта 2019

Пользователь должен ввести некоторые элементы, а затем матрица должна напечатать их на 3х4 Когда я использую «% c» вместо «% s», работает, но он показывает только символ, но когда я хочу напечатать все слово с «% s», работать не будет.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char objetos[10][10];

int main(){

    int i,e;

    for (i=1;i<=3;i++){
        for (e=1;e<=4;e++){
            system("cls");  
            printf("Ingrese El Objeto Personal %i-%i: ",i,e);
            scanf("%s",&objetos[i][e]);
        }
    }

    system("cls");
    for (i=1;i<=3;i++){
        for (e=1;e<=4;e++){ 
            printf("%s",objetos[i][e]);
        }
        printf("\n");
    }

    return 0;
}

1 Ответ

2 голосов
/ 19 марта 2019

но когда я хочу напечатать целое слово с "% s", не будет работать?

Спецификатор формата %s ожидает аргумент const char*, а objetos[i][e] - неттипа char*, типа char.Измените

for (i=1;i<=3;i++){
   for (e=1;e<=4;e++){ 
   printf("%s",objetos[i][e]);
}

на

for (i=1;i<=3;i++){
    printf("%s",objetos[i]);
}

Также при сканировании это

scanf("%s",&objetos[i][e]);

неверно, используйте %c вместо %s здесь.

Например,

for (i=1;i<=3;i++){
     for (e=1;e<=4;e++){
         system("cls");  
         printf("Ingrese El Objeto Personal %i-%i: ",i,e);
         scanf(" %c",&objetos[i][e]);
     }
}

Примечание, индекс массива начинается с zero(0), а не one(1) в C.Может показаться, что вы помещаете данные в objetos[1] и читаете из objetos[1], но по ошибке, если ваша программа когда-либо пытается прочитать из objetos[0], это создает проблему.

Лучше начать вращение петли с индекса 0th.Например,

for (i=0;i<=3;i++){
    for (e=0;e<=4;e++){
      scanf(" %c",&objetos[i][e]); /* give the whitespace before %c to avoid buffer overrun */
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...