C/C++

Помогите разобраться с программой Си.

Учусь программировать. Учебная программа рассчитана на работу со строками.

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

int main (void)
{

// Массив, в который помещается считываемая строка
int n = 100;

char masstr[n];

//Запрос ввода строки
printf ("Введите строку:\n");

//Ввод строки
gets(masstr);

//Считаем число символов
n = strlen(masstr);
for (int i=1;i<10;i++)
{
char z = masstr[i];
printf ("%d\n",z);
}
//Вывод результата работы
printf ("Считана строка:\%s \nЧисло символов в строке: %d",masstr,n);
return 0;
}

К примеру вводится текст "1 человек на луне - Юрий гагарин".

Я хочу получать букву/цифру/символ из masstr[n] по её номеру в строке (включая пробелы). Но что то работает не так. Покажите как написать правильно, чтобы всё работало пожалуйста.

П.С Так как только учусь пожалуйста используйте простой код без всяких страшных подключений и непонятных сокращений.
1. Эта программа должна иметь расширение .c, а не дефолтовое .cpp. Если оставить дефолтовое расширение, то компилятор будет расценивать её как с++ программу, а в стандарте c++14 функция gets() полностью ликвидирована.
2. Не указан компилятор/ось и версии. Чтобы под виндой использовать русский язык в консоли, придётся использовать платформенные средства. Решение здесь: https://ru.stackoverflow.com/questions/459154/%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9-%D1%8F%D0%B7%D1%8B%D0%BA-%D0%B2-%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D0%B8
3. Вот такой блок кода - расширение, поддерживаемое далеко не всеми компиляторами
  int n = 100;  
char masstr[n];
чтобы это собиралось в более стандартных, нужно законстантить n, т.е. const int n = 100;, ну и не использовать n для других вычислений.
4. >Я хочу получать букву/цифру/символ из masstr[n] по её номеру в строке (включая пробелы).
Вы их и получаете. Указывайте вид, в каком они вам нужны, если вас не устраивает обычный char и вывод в десятичном формате.
5. n = strlen(masstr); // Не используйте одну переменную для разных целей. Общая длина массива и длина строки в этом массиве - логически разные вещи.
6. В формате вывода "Считана строка:\%s..." первый слэш ошибочен.
Анатолий Выскребенцев
Анатолий Выскребенцев
30 155
Лучший ответ
Денис Котович 1. Программа имеет данное расширение.
2. Уже сделано и применено. Используется Dev-C++ 6.3 ()
3. Согласен. Тут использован грубый костыль. Мысль в том, чтобы длинна строки автоматически подстраивалась под число введённых символов.
4. Вместо соответствующему символу в страке выводится непонятный номер (Скр 1). Так символ 1 должен показывать 1, символ 2 - 2, символ 6 - пробел, символ 7 - знак тире. П.с.Для наглядности скриншота программа была немного отредактирована (Скр 2)
Анатолий Выскребенцев Обратите внимание, что а). в цикле
for (int i=1;i<10;i++) // игнорируется нулевой символ, поэтому вывод
// для строки 12345 -.. начинается с символа 2
{
char z = masstr[i];
printf ("%d\n",z); // Если хотите выводить не код символа, а сам символ
// используйте такое форматирование: printf ("%c\n",z);
}
Вам нужна практика!, думается у Вас очень старый компилятор, раз допускает функцию gets, без каких либо пояснений со стороны компилятора, у тебя массив masstr-хорошо, но в функцию gets ты передал только точку отсчета в оперативной памяти(указатель) это &masstr[0], не факт что ты введешь меньше (n-1) символов с клавы, если наберешь больше, то будет ошибка сегментации! Поэтому лучше не падай головой на клаву перед сном))
AY
Abduqodir Yusupov
508