В Чем Ошибка?

  • Автор темы Veesk18
  • Дата начала
V

Veesk18

#1
C++:
#include <stdio.h>
#include <stdlib.h>
/*
Написать функцию, которая подсчитывает общее количество различных символов в
данной строке. Прототип функции int function_name (char *s). Проверить работу
функции на строке, введенной с клавиатуры. 
{В приведенных задачах блока не использовать библиотечные функции по обработке строк.
Хранение всех массивов осуществлять в динамической памяти.}
*/
int chars_count(char *s) // описание функции
{
int i=0;
for (i=0; s[i]!=0; i++); // перебираем все символы, увеличивается счетчик i
return --i; // возвращ. знач (i-1)
}

int main()
{
printf("Write a string: \n");

int i=0;
char *s =(char *) malloc(0); // создаем динамическую строку

do
{
realloc(s, sizeof(s)+sizeof(char)); // выделяем память
scanf("%c", &s[i]);				 // считываем с клавиатуры символ
i++;								// увеличиваем счетчик и по кругу
}
while (s[i-1]!=10);				  // До тех пор, пока не нажат enter
s[i]=0;							  // посл. символ = 0

i=chars_count(s);		 // вызываем нашу функцию, передавая ей дин.строку

printf("\nChars count is: %d\n\n", i); // выводим результат на экран

system("PAUSE");	
return 0;
}
 
V

Veesk18

#3
не работает выдает системное сообщение вот в этом месте scanf("%c", &s);
 

Stashevckiy

Well-known member
23.10.2011
56
0
#4
не работает выдает системное сообщение вот в этом месте scanf("%c", &s);

у меня все работает...странно, что у тебя нет. Только прога считает количество не различных элементов в строке( как у тебя в комментариях указано), а она у тебя считает количество всех символов строки.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#6
В чем смысл скриншота? Что мы на нем должны увидеть?
 

lazybiz

Well-known member
03.11.2010
1 339
0
#8
А с чего ты взял что так можно строки выделять?
C++:
 char *s =(char *) malloc(0); // создаем динамическую строку
Это равнозначно тому что ты напишешь: char *s = NULL;
А если точнее, то запись char *s = NULL; даже будет вернее чем char *s =(char *)malloc(0);

Смотри прототип функции realloc: http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/
Она не просто так значение возвращает.
 
V

Veesk18

#9
да в чем ошибка, не пойму вроде же верно все
 

lazybiz

Well-known member
03.11.2010
1 339
0
#10
Присвой указателю на строку значение, возвращаемое функцией realloc !!!
 

lazybiz

Well-known member
03.11.2010
1 339
0
#16
Тяжелый случай...

В начале: char *s = NULL;
В теле цикла: s = realloc( s, i + 1 );
 
V

Veesk18

#17
char *s = NULL; // создаем динамическую строку

do
{
s = realloc( s, i + 1 );; // выделяем память
scanf("%c", &s); // считываем с клавиатуры символ
i++; // увеличиваем счетчик и по кругу
}
while (s[i-1]!=10); // До тех пор, пока не нажат enter
s=0; // посл. символ = 0

i=chars_count(s); // вызываем нашу функцию, передавая ей дин.строку

printf("\nChars count is: %d\n\n", i); // выводим результат на экран

system("PAUSE");
return 0;
ТАК?????????7