Я пытаюсь принять предложение как ввод от пользователя в приведенном ниже коде. например. Вход -
9
Сделай или умри
#include<iostream>
using namespace std;
int main(){
int n;
cout<<"Enter the length of the sentence: ";
cin>>n;
cin.ignore();
char array[n+1];
cin.getline(array,n);
cin.ignore();
cout<<array[7]<<endl;
cout<<array[8]<<endl;
При печати массива [7] я получаю «i» в качестве вывода, но при печати массива [8] я ожидаю «e» в качестве вывода, но я ничего не получил в качестве вывода. Я объявил массив символов размером (n + 1), что означает, что массив [n] должен быть нулевым символом, но почему массив [8] получается нулевым символом?
Я где-то ошибаюсь?
2 ответа
Std::istream::getline(char* s, размер потока n):
- Извлекает символы из потока как неформатированные входные данные и сохраняет их в s как c-строку.
- n — максимальное количество символов, которые нужно записать в s, включая завершающий нулевой символ.
Если вы хотите прочитать свои 9 символов предложения, не только ваш буфер должен иметь длину 10 символов, но и n в getline должно быть равно 10.
https://www.cplusplus.com/reference/istream/istream/getline/
Ответом на актуальную проблему занимается @SKCoder, поэтому я просто хочу добавить, что обработка ввода лучше работает с std::string
, и я соответствующим образом изменил код:
#include <iostream>
int main(){
size_t n;
std::cout<<"Enter the length of the sentence: ";
std::cin>>n;
std::cin.ignore();
std::string str;
std::getline(std::cin, str);
std::cin.ignore();
std::cout<<str.substr(str.length()-2, 2)<<"\n";
std::cout << (str.length() != n? "length is wrong": "length is correct") << "\n";
}
Обычно я не использую using namespace std;
, чтобы избежать конфликтов пространств имен, но в этом случае это может иметь смысл.
Используя строку, вам больше не нужна длина, поэтому вы можете использовать ее для проверки правильности ввода.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .
array[n]
в null ?