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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2009, 22:58   #1
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
Сообщение Почему читает лишнюю строку

Привет всем!

int main(int argc, char *argv[])
{ int i,n;
string * str[10];
printf ("How many strings? ");
scanf ("%d", &n);
for (i=0;i<n;i++)
{ str[i] = (string*) malloc (sizeof(str[i]));
if (str[i]==NULL) exit (1);
scanf("%s\n",&str[i]);
str[i]+='\0';
}
for (i=0;i<n;i++)
{printf ("string%d: %s\n",i,&str[i]);
free (str[i]);
}
system("PAUSE");
return EXIT_SUCCESS;
}
а теперь вопрос : почему когда я вначале ввожу например 3
он читает 4 строки???
Заранее благодарю-с
nusik вне форума Ответить с цитированием
Старый 19.05.2009, 23:04   #2
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Код:
for (i=0;i<=n;i++)
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 19.05.2009, 23:10   #3
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

SunKnight, тогда 5 будет.

Код:
str[i] = (string*) malloc (sizeof(str[i]));
здесь точно проблема.


nusik, Вы на С или С++ пишете?
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....

Последний раз редактировалось ISergeyN; 19.05.2009 в 23:14. Причина: добавил
ISergeyN вне форума Ответить с цитированием
Старый 19.05.2009, 23:20   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

string - это строка из библиотеки STL?
Тогда использовать нужно new, а не malloc. И в scanf её нельзя вводить. Только посредством cin или же в какой-нибудь буферный массив символов вводить ив строку уже копировать.
pu4koff вне форума Ответить с цитированием
Старый 19.05.2009, 23:21   #5
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Цитата:
Сообщение от ISergeyN Посмотреть сообщение
SunKnight, тогда 5 будет.

Код:
str[i] = (string*) malloc (sizeof(str[i]));
здесь точно проблема.


nusik, Вы на С или С++ пишете?
Совершенно верно 5 штук...
пишу на с++ инструмент wxDevCPP.
nusik вне форума Ответить с цитированием
Старый 19.05.2009, 23:22   #6
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

#include <cstdlib>
#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{ int i,n;
string * str[10];
printf ("How many strings? ");
scanf ("%d", &n);
for (i=0;i<10;i++) str[i]=(string*)"\0";
for (i=0;i<n;i++)
{ str[i] = (string*) malloc (sizeof(str[i]));
if (str[i]==NULL) exit (1);
scanf("%s\n",&str[i]);
str[i]+='\0';
}
for (i=0;i<n;i++)
{printf ("string: %s\n",&str[i]);
free (str[i]);
}
system("PAUSE");
return EXIT_SUCCESS;
}
nusik вне форума Ответить с цитированием
Старый 20.05.2009, 18:22   #7
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

пишу на с++
Мда...


Код:
#include <iostream>
#include <string>

using namespace std;
int main()
{
	int count;
	string *str;
	cout << "How many strings? : ";
	cin >> count;

	str = new string[count];

	for(int i = 0; i < count; ++i)
		cin >> str[i];

	cout << "Result: " << endl;

	for(int i = 0; i < count; ++i)
		cout << str[i] << endl;

	system ("pause");

	return 0;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не читает входную строчку DoGGy Паскаль, Turbo Pascal, PascalABC.NET 3 23.01.2009 21:46
плеер Divx не читает Xatr Софт 4 26.12.2008 03:00
DEV C++ не читает русские буквы gumar Общие вопросы C/C++ 1 21.04.2008 09:53
DVD после записи не читает собственные диски photozaz Свободное общение 14 10.04.2008 12:17