Ошибка в решении задачи

243
17 января 2018, 17:22

Вот задача:

Составить программу, которая на входе должна получать последовательность цифр, после чего программа показывает цифру, порядковый номер которой ввел пользователь.

И вот мой код:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    char string[100];
    cout << "Введите последовательность цифр: ";
    cin >> string;
    int k;
    cout << "\nВведите порядковый номер цифры: ";
    cin >> k;
    if ((k - 1) < 0 || k > strlen(string))
        cout << "\nНекорректный ввод порядкового номера" << endl << endl;
    else
    cout << "\nk-я цифра последовательности: " << string[k] << endl;
    return 0;
}

Однако он не работает. Где же ошибка?

Answer 1

Пожалуй, напишу еще один ответ. Так как данный вопрос помечен как относящийся к С++, то было бы лучше заменить массив char'а строкой string.

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    string string;
    cout << "Введите последовательность цифр: ";
    getline (cin, string);
    int k;
    cout << "nВведите порядковый номер цифры: ";
    cin >> k;
    if ((k - 1) < 0 || k > string.length())
        cout << "nНекорректный ввод порядкового номера" << endl << endl;
    else
    cout << "nk-я цифра последовательности: " << string[k - 1] << endl;
    return 0;
}

Важно! Результат выполнения кода почти не изменится, только увеличится максимальная длина последовательности! Если нужно его поставить, проинициализируйте переменную string должным образом.

Answer 2

Ошибка в строке:

cout << "\nk-я цифра последовательности: " << string[k] << endl;

А надо:

cout << "\nk-я цифра последовательности: " << string[k - 1] << endl;

Дело в том, что в массивах счет индексов начинается с нуля. Попробуйте, должно заработать. Хотя странно, что ошибка именно в этом месте.

Answer 3

Ошибка здесь:

cout << "nk-я цифра последовательности: " << string[k] << endl;

Индекс измените на [k - 1].

Answer 4

поменяйте способ ввода

for (size_t i = 0; i < strlen(string); ++i)
        std::cin >> string[i];

я думаю вы вводили цифры и где то ввели пробел, потому и не работал код, а лучше вводить в std::string

READ ALSO
Удаление объекта из вектора во время цикла проходящего по этому вектору

Удаление объекта из вектора во время цикла проходящего по этому вектору

Для разминки в с++ пишу небольшую ООП надстройку над WinApi, для того чтобы можно было парой строчек кода создавать окна и проводить необходимые...

316
Синхронизация процессов

Синхронизация процессов

Подскажите, как сделать синхронизацию процессов? Через fork создаю 2 дочерних процесса, и мне нужно читать файл, чтобы каждый процесс читал...

221
Почему не работает шаблон?

Почему не работает шаблон?

Мне нужно написать шаблон, который меняет местами диагонали матрицыПри компиляции выдает ошибку и не знаю как исправить

231
сортировка изображений

сортировка изображений

Сравнил попарно все изображения - получается матрица чисел (для удобства сжаты до 0-254) N x N, как теперь упорядочить чтобы похожие были рядом...

258