Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2011, 22:20   #1
proag
Пользователь
 
Регистрация: 06.11.2010
Сообщений: 15
По умолчанию Строки

Вот такой простой код, а выводит непонятно что. Помогите разобраться

Код:
#include <iostream>
using namespace std;
void main()
{
    char *s1 = new char[100];
	char *s2 = new char[110];
	cout<<"Enter string s1: ";
	cin.getline(s1, sizeof(s1));
	cout<<"Enter string s2: ";
	cin.getline(s2, sizeof(s2));
	cout<<s1<<"\t"<<s2<<endl;
	delete[]s2;
	delete[]s1;
}
При вводе s1 = balda ohoho, запрос ввода s2 не происходит, а в s2 сразу заноситься bal, более того cout<<s1<<"\t"<<s2<<endl; пропускается и программа завершается .Как это? Должно просить ввода двух строк и вывод на экран
proag вне форума Ответить с цитированием
Старый 03.03.2011, 22:31   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Вот так нужно:
Код:
	cin.getline(s1, 100);
	..............
	cin.getline(s2, 110);
sizeof(s1) возвратит 4 байта - размер указателя. При этом не все данные на первом этапе вычитаются из входного потока.

Последний раз редактировалось profi; 03.03.2011 в 22:36.
profi вне форума Ответить с цитированием
Старый 03.03.2011, 22:31   #3
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Для начала посмотрите мои изменения к коду
Код:
#include <iostream>
using namespace std;
int main()
{
        char *s1 = new char[100];
	char *s2 = new char[110];
	cout<<"Enter string s1: ";
	cin.getline(s1, 100);
	cout<<"Enter string s2: ";
	cin.getline(s2, 110);
	cout<<s1<<"\t"<<s2<<endl;
	delete[]s2;
	delete[]s1;
	cin.ignore();
	cin.get();
	return 0;
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 03.03.2011, 22:50   #4
proag
Пользователь
 
Регистрация: 06.11.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
Для начала посмотрите мои изменения к коду
И что сделали следующие строки? Результат и без них тот же. Хотя, возможно, это на первый взгляд
Код:
	cin.ignore();
	cin.get();
proag вне форума Ответить с цитированием
Старый 03.03.2011, 22:55   #5
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Код:
cin.ignore();
cin.get();
Это чтоб программа сразу не закрылась! Ну это не существенные изменения!
Самое главное это, размер передаваемый в getline();
Вам правильно сказали что передавать sizeof(s1) это ошибка! Так как s1 это указатель! А размер указателя всегда равно 4 байтам!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Дбавление новой строки, после строки с подходящими параметрами RailOS Microsoft Office Excel 5 18.08.2010 10:12
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10