Тема: Допоможіть знайти помилку в коді С
Завдання: задана не порожня послідовність не порожніх слів із латинських букв; сусідні слова відділяються одне від одного комами, а в кінці крапка. Визначити слова, які закінчуються буквою w. Мій код в файлі
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Допоможіть знайти помилку в коді С
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Завдання: задана не порожня послідовність не порожніх слів із латинських букв; сусідні слова відділяються одне від одного комами, а в кінці крапка. Визначити слова, які закінчуються буквою w. Мій код в файлі
Теги code використовуйте. І описуйте, чому вважаєте, що там є помилка.
Так, і в 21-му рядку ви намагаєтеся прочитати ryadok[-1].
Ну і зрозумілі назви змінних на кшталт nastupne замість n теж додають якості коду (а ще краще next).
І ще подивіться на функцію strtok.
вас вчили писати коментарі в коді ?
не хвилюйтесь, з коментарями програма не стає більшою
вас вчили писати коментарі в коді ?
не хвилюйтесь, з коментарями програма не стає більшою
виправив
Теги code використовуйте. І описуйте, чому вважаєте, що там є помилка.
Так, і в 21-му рядку ви намагаєтеся прочитати ryadok[-1].
Ну і зрозумілі назви змінних на кшталт nastupne замість n теж додають якості коду (а ще краще next).
І ще подивіться на функцію strtok.
В мене не буде випадку, коли треба буде прочитати ryadok[-1], адже умова буде виконуватися тільки якщо елемент з індексом і буде комою, а нульовий елемент в моїй програмі не може дорівнювати комі, там завжди буде якась буква.
koala написав:Теги code використовуйте. І описуйте, чому вважаєте, що там є помилка.
Так, і в 21-му рядку ви намагаєтеся прочитати ryadok[-1].
Ну і зрозумілі назви змінних на кшталт nastupne замість n теж додають якості коду (а ще краще next).
І ще подивіться на функцію strtok.В мене не буде випадку, коли треба буде прочитати ryadok[-1], адже умова буде виконуватися тільки якщо елемент з індексом і буде комою, а нульовий елемент в моїй програмі не може дорівнювати комі, там завжди буде якась буква.
А що, правда, що з усіх зауважень ви бачите тільки одне?
Тим більше, що в 
ця умова була трохи в іншому місці.
chygaistr написав:koala написав:Теги code використовуйте. І описуйте, чому вважаєте, що там є помилка.
Так, і в 21-му рядку ви намагаєтеся прочитати ryadok[-1].
Ну і зрозумілі назви змінних на кшталт nastupne замість n теж додають якості коду (а ще краще next).
І ще подивіться на функцію strtok.В мене не буде випадку, коли треба буде прочитати ryadok[-1], адже умова буде виконуватися тільки якщо елемент з індексом і буде комою, а нульовий елемент в моїй програмі не може дорівнювати комі, там завжди буде якась буква.
А що, правда, що з усіх зауважень ви бачите тільки одне?
зараз виправлю
І описуйте, чому вважаєте, що там є помилка.
Певно, мені вже краще змінити тему на "Допоможіть скласти код", адже я не впевнений, що помилка в коді. Просто коли я перевіряв код, роблячи всі дії вручну, на листку, слідуючи командам, то у мене все виходило.
Якщо не маєте можливості встановити компілятор - користуйтеся онлайн-компіляторами, наприклад, ideone.com. 
А у вас все зовсім неправильно вийшло. Наприклад, вас не насторожує, що тут
//Заповнення масиву відповідей
ryadok[m] = vidpovidi[c];заповнюється не масив відповідей, а зовсім навпаки?
А ще можна ввести не 30 символів; і якщо більше, ніж 30, ще якось обробляться, то менше будуть докручуватися до 30 сміттям, бо всі цикли у вас до 30, а не до кінця рядка (strlen).
А ось вам те, що ви хотіли написати, але соромилися 
 :
#include <stdio.h>
int main()
{
    int zaraz = 0,
        poperednye = 0,
        ostannye = 0;
    char ryadok[30];
    char vidpovidi[30];
    //Заповнюю масив словами
    printf("Vvedit' slova cherez komy\n");
    fgets(ryadok, 30, stdin);
    //Аналізую кожен елемент масиву
    for( zaraz = 0; zaraz < 30; ++zaraz )
    {
        if( ( ryadok[ zaraz ] == ',' ) || ( ryadok[ zaraz ] == '.' ) )
        {
          if( ryadok[ zaraz - 1 ] == 'w' )
      {
        while( poperednye <= zaraz )
        {
          vidpovidi[ ostannye++ ] = ryadok[ poperednye++ ];
        }
      }
      poperednye = zaraz + 1;
        }
        if( ryadok[ zaraz ] == '.')
      break;
    }
    //Ставлю в кінці крапку
    if (vidpovidi[ ostannye - 1 ] == ',')
    {
        vidpovidi[ ostannye - 1 ] = '.';
    }
    //Вивід відповіді на екран
    for (zaraz = 0; zaraz < 30; ++zaraz)
    {
        printf("%c", vidpovidi[ zaraz ]);
        if( vidpovidi[ zaraz ] == '.')
      break;
    }
    return 0;
}А у вас все зовсім неправильно вийшло. Наприклад, вас не насторожує, що тут
//Заповнення масиву відповідей ryadok[m] = vidpovidi[c];заповнюється не масив відповідей, а зовсім навпаки?
А ще можна ввести не 30 символів; і якщо більше, ніж 30, ще якось обробляться, то менше будуть докручуватися до 30 сміттям, бо всі цикли у вас до 30, а не до кінця рядка (strlen).
Дуже дякую! Це те, що мені було потрібно)
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися