У меня есть некоторые проблемы с функцией scanf в C. Когда я компилирую это, он показывает сообщение: Ошибка сегментации - PullRequest
0 голосов
/ 02 июня 2019

Хорошо, позвольте мне быть здесь конкретным. Я хочу создать программу с функцией scanf , которая попросит пользователя ввести информацию, подобную этой:

  1. Введите свой возраст здесь_ (предположим, я набрал 16 в моем возрасте) ( 1-й вывод ): Ваш возраст 16
  2. Введите здесь ваше имя_ (предположим, я наберу Джон) ( 2-й вывод ): Вас зовут Джон Теперь, ничего не спрашивая у пользователя, он должен автоматически выдавать результат вроде: ( 3-й вывод ): Вас зовут Джон, и вам 16 лет.

Ниже приведено изображение, которое покажет мою ошибку: Изображение, снятое мной

Мой первый и второй выходные данные работают хорошо, но проблема с третьим. Он не показывает весь 3-й вывод в компиляторе. но вместо того, чтобы показывать ошибки или предупреждения, он показывает текст, говорящий «Ошибка сегментации». Пожалуйста, исправьте мой код. Пожалуйста, пожалуйста, пожалуйста.

#include <stdio.h>

int main()
{
int age;
char name;

printf("Enter your age here: ");
scanf("%d", &age);
printf("Your age is %d \n", age);

printf("enter your name here: \n");
scanf("%s", &name);

printf("Your name is %s and your age is %d.", name, age);

return 0;
}

1 Ответ

0 голосов
/ 02 июня 2019

Вы объявили символ, но рассматриваете его как строку. В C строки на самом деле являются одномерными массивами символов с нулевым символом '\ 0' в конце.

Следующее:

"my fun string"

соответствует этому в C:

{'m', 'y', ' ', 'f', 'u', 'n', ' ', 's', 't', 'r', 'i', 'n', 'g', '\0'}

Вам нужно выделить массив символов, достаточно большой для имени. Примерно так:

int max_size=120; char name[max_size];

поэтому ваш код должен выглядеть так:

#include <stdio.h>

int main()
{
    int age;

    int max_size=120;
    char name[max_size];
    printf("Enter your age here: ");
    scanf("%d", &age);
    printf("Your age is %d.\n", age);

    printf("enter your name here: \n");
    scanf("%s", &name);

    printf("Your name is %s and your age is %d.\n", name, age);

    return 0;
}

Кроме того, вы, вероятно, не должны использовать scanf(). fgets() является предпочтительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...