В Чем Ошибка?

Тема в разделе "C/C++/C#", создана пользователем Veesk18, 3 дек 2011.

  1. Veesk18

    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;
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    А что не так то?
     
  3. Veesk18

    Veesk18 Гость

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

    Stashevckiy Well-Known Member

    Регистрация:
    23 окт 2011
    Сообщения:
    56
    Симпатии:
    0

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    В чем смысл скриншота? Что мы на нем должны увидеть?
     
  6. Veesk18

    Veesk18 Гость

  7. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    А с чего ты взял что так можно строки выделять?
    Код (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/
    Она не просто так значение возвращает.
     
  8. Veesk18

    Veesk18 Гость

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Присвой указателю на строку значение, возвращаемое функцией realloc !!!
     
  10. Veesk18

    Veesk18 Гость

    :D гдеее???? напиши пожалуйста""" ПОЖАЛУЙЙЙЙЙЙЙСТА
     
  11. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    В той строке где ты перевыделяешь память.
     
  12. Veesk18

    Veesk18 Гость

    да все равно не работает
     
  13. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Покажи что ты сделал.
     
  14. Veesk18

    Veesk18 Гость

    char *s =(char *) realloc;
     
  15. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Тяжелый случай...

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

    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
     
  17. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
Загрузка...
Похожие Темы - Чем Ошибка
  1. rn3rjd
    Ответов:
    4
    Просмотров:
    862
  2. IvendsI
    Ответов:
    2
    Просмотров:
    1.180
  3. rainprogrammer
    Ответов:
    3
    Просмотров:
    1.169
  4. dimat
    Ответов:
    2
    Просмотров:
    1.846
  5. m0tion
    Ответов:
    1
    Просмотров:
    96

Поделиться этой страницей