Тема: Допоможіть знайти помилку в коді С
Завдання: задана не порожня послідовність не порожніх слів із латинських букв; сусідні слова відділяються одне від одного комами, а в кінці крапка. Визначити слова, які закінчуються буквою 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
Для відправлення відповіді ви повинні увійти або зареєструватися