Всем доброго времени суток.
Есть исходный массив, в который пользователь будет вводить текcт, есть массив под букву, которую нужно вставить в слово, и есть результирующий массив, в котором будет слово и вставленная буква в слове.
Как мне говорил учитель, что Word можно объявить как переменную, а не массив, но когда пользователь вводить букву, приложение просто крашится с окном ошибки (стоит windows xp).
Самая основная проблема, что при пересадке пропадает первая буква исходного текста! На самом деле важно то, что после того, как пользователь выбрал букву, у нас пропадает первая буква в исходном тексте, сам проверял.
Мне главное понять, почему буква пропала. Заранее спасибо за ответы и внимание!
Внизу есть закомментированые циклы, т.е. ввод букв до позиции и после.
Не обращайте внимание на копирование в цикле с 1, это я проверял, правда ли символ пропадает, я знаю, что с 0 надо вводить. Задачу я сам решил, всем спасибо!
#include <conio.h>
#include <string.h>
#include <iostream>
using namespace std;
main(){
char text[10]; //наш исходный массив, предполагаемый текст - helloworld
char word[1]; //(можно ли объявлять его не как массив?) наша буква
char test[11]; //наш результирующий массив
int position = 0, i; //позиция и счетчик
printf("Enter text: ");
gets(text); //вводим текст
printf("%s", text); //проверяем, правильно ли введен (+правильно)
printf("\nEnter word: ");
fgets(word, 2, stdin); //вводим букву
printf("%c", word[0]); //проверяем букву
cout << "\nEnter position: ";
cin >> position;
cout << "\nPosition: " << position;
position --; //мы считаем позицию с 0, пользователь с 1
for(i = 0; i < 11; i++){ //перенос букв из исходного массива в результирующий, переносит правильно, а первая буква пропадает
test[i] = text[i];
printf("%c", test[i]); //отлавливаем, попадают ли буквы в результирующий массив
getch();
//if(i == position) не работает //попытка вставить заданную букву на позицию результирующего массива, а после неё продолжить вставлять буквы из исходного массива
//test[i] = 0;
}
/*for(i = 1; i < 6; i++){
printf("%c", test[i]);
getch();
}*/
/*for(i = 0; i > position; i++){
test[i] = text[i];
printf("%c", test[i]);
getch();
}*/
getch();
}
Во-первых, не используйте gets
, никогда. Представьте себе, что пользователь ввёл 100 символов — как вы думаете, что произойдёт? (Это важный вопрос, убедитесь, что вы в точности понимаете это.) И да, если функция доступна, это не значит, что использовать её хорошая идея.
Во-вторых, массивы в C (ну и в C++) нумеруются начиная с нуля. Поэтому ваш цикл копирования неверен.
В-третьих, да, под один символ вполне можно выделить переменную типа char
. При этом вводить её при помощи fgets
(да и gets
) будет неправильно, т. к. эти функции дописывают в хвост строки \0
. Ваш код сейчас тоже неверен, т. к. он выделяет лишь один символ, и тем самым не учитывает финальный \0
(это отвлекаясь от того факта, что пользователь программы может ввести сколько угодно символов, как раньше).
Исправьте это и смотрите дальше.
Ещё одно замечание: вы пишете на дикой смеси C и C++. В C++ массивы символов практически не используются в качестве строк, вместо них используется std::string
. Сейчас это наверняка неважно, но станет важно позже. Если вам говорят, что C — подмножество C++, и код на C является правильным кодом на C++, можете сразу отмечать внутри, что этот человек плохо понимает и C, и C++. C — не подмножество C++, а его родовая травма: ради чисто маркетинговой идеи совместимости с C в C++ на уровне синтаксиса многие вещи в C++ реализованы ужасно.
Кстати, для операций со строками в C есть довольно много встроенных функций наподобие strcpy
и strcat
. Но лучше сначала поработать со строками вручную, эти функции делают именно то, что и вы делаете.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Не подскажете, как нарисовать картинку с помощью OpenGl?
Здраствуйте помогите с программой (C++) Вводится одно число которое может быть максимум 1000 значным(соответственно его можно прочесть только...
Есть код, который я нашел на просторах интернетаГлавная цель кода - показать все файлы в главной папке и подпапках