• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

В Чем Ошибка?

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

Veesk18

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

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

Stashevckiy

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

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

Veesk18

scanf("%c", &s); выделяется синим цветом и вылезает ошибка вооот
 
L

lazybiz

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

Смотри прототип функции realloc:
Она не просто так значение возвращает.
 
L

lazybiz

Присвой указателю на строку значение, возвращаемое функцией realloc !!!
 
V

Veesk18

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
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!