|
Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Прошу помочь найти ошибку в программе. |
|
|
Прошу помочь найти ошибку в программе.
|
Пользователь Сообщения: 54 |
Профиль | Отправить PM | Цитировать
Всем привет!
У меня вот возник такой вопрос, на который я уже совершенно не знаю ответа.... я как бы занимаюсь в данное время изучением программирования на языке С с использованием массивов и на данном этапе передо мной встал такой вопрос: необходимо написать программу: Вводится ряд Т, состоящий из символов, затем вводятся значения символов u и v. Программа заменяет в ряду Т значения символа u на значения символа v и наоборот, значения символа v на значения символа u. Т.о. формируется ряд Q, который и выводится на экран. Как я понял, Т, Q, u, v - это все массивы. Все это выглядит примерно так: T= asdafgfh v=a; u=f; Q=fsdfagah Ну и написал я как бы соответствующую программу: #include <stdio.h> int main() { char T[10], Q[10], v[1], u[1];//* u, v - это у нас массивы, состоящие из 1-ого элемента*// char temp[10]; int i=0; { printf("Enter T: ", T[10]); scanf("%s", &T[10]); T[10]=temp[10];//* отправляем полученный ряд Т во временную папку temp*// temp[10]=Q[10];//*как бы присваиваем ряду Q значения ряда Т, т.е. т.о. ряд Q у нас формируется из символов ряда T*// } printf("Please, enter u:", u[1]); scanf ("%s", & u[1]); printf("Please, enter v:", v[1]); scanf ("%s", & v[1]); do { Q[i]=0;//* Определяем i-тый элемент ряда Q*// } while ((i=i+1)<=10); do { temp[i]=0;//*Определяем i-тый элемент ряда temp (Q=T=temp)*// } while ((i=i+1)<=10); for(i = 0; i<=10; ++i) if(Q[i]==u[1]) { Q[i]==v[1]; } else { Q[i]==temp[i]; }//*Если и-тый элемент равен значению u, меняем его на значение v, в противном случае он равен своему прежнему значению, взятому из temp*// if (Q[i]==v[1]) { Q[i]==u[1]; } else { Q[i]==temp[i]; }//* то же самое, только теперь с v*// Q[10]==Q[1]&&Q[2]&&Q[3]&&Q[4]&&Q[5]&&Q[6]&&Q[7]&&Q[8]&&Q[9]; { printf("Q=10.0 %s/n",Q[10]); } Вот только программа эта не работает... она запускается, запрашивает введение T, u, v, а потом просто выдает ошибку segmentation fault. Кто-нибудь может подсказать почему? Спасибо.... |
|
------- Отправлено: 12:38, 04-12-2005 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Ну вооот... уже 11 человек сюда посмотрели и никто ничего не ответил.... что, неужели это ТАК сложно?
|
------- Отправлено: 14:00, 04-12-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 278
|
Профиль | Отправить PM | Цитировать Цитата:
может попробовать просто scanf("%s", T); Кстати, и зачем необходимо использовать массив из одного!! элемента??? Потом непонятно зачем нужно два цикла? Может я чего-то не догоняю, но прога кривая Остальное лень разбирать, хоть бы пост оформил по нормальному... |
|
Отправлено: 15:56, 04-12-2005 | #3 |
Новый участник Сообщения: 16
|
Профиль | Сайт | Отправить PM | Цитировать Не понял,зачем тебе u и v как массивы???
Что за извращение иметь массив содержащий одно значение?? К тому же когда обращаешься к первому элементу массива,то надо v[0] ато так ты вылетаешь за границы массива. ПО крайней мере если писать под винду то это так Под Никсы не писал никогда |
------- Отправлено: 16:15, 04-12-2005 | #4 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать Duddits
первый элемент массива зависит не от ОС, а от спецификации языка C И он действительно 0-ой - Вы абсолютно правы. Sox ну собственно, ребята уже поотвечали. Внесу свои 5 копеек вроде бы не по прямому вопросу, нео имхо по теме. Есть разные способы выяснять, что в программе где сломалось, - можно использовать специальные среды разработки, позволяющие пошаговую трассировку и обозначение точек останова. А можно в простейших случаях и для небльших программ сделать это вручную: Если программа валится, попробуйте выяснить где именно. Для этого можно пошагово с первых строчек ставить printf результата на этот момент (или значение какой-либо переменной) и выход из фуенции/программы. Таким образом в маленькой программе очень быстро находится непотребное место. Дальше смотрится на него пристально и думается в чем ошибка Если не придумывается, - пишется сюда ps а код, действительно надо оформлять так, чтоб его можно было читать (со всеми отступами и по всем правилам). В этом форуме для этого служит тег-контейнер [code] |
|
Отправлено: 17:19, 04-12-2005 | #5 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Zippy
Ну так я и говорю о том, что прога кривая и прошу написать как это дело исправить... а то я и сам не догоняю этого...я же не писал, что прошу найти ошибку в нормально работающей программе вроде бы.... и чем не нравится оформление поста? Я пробовал использовать тег вставки кода на форуме, но оформление от этого только хуже... Нет, вариант scanf("%s", T) не прокатывает... массивы с одним значением нужны чтобы их сравнивать с элементами ряда. Если оставить их как просто u, v... то будет ошибка в сравнении.... переменной с массивом... |
------- Отправлено: 17:32, 04-12-2005 | #6 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать mar
Ну собственно мне мало че понятно из их ответов... можно попросить как бы чтобы ответы содержали какие-либо конкретные указания для компилятора, что и как он должен делать... в сущности ведь программа достаточно простая... и для человека, который действительно разбирается в этом вопросе не должно составить труда объяснить мне как начинающему как исправить эту программу в таком ключе, чтобы она заработала...а то она отказывается... mar насколько я слышал от других, что-то неверно в самом алгоритме действий... чтобы знающий человек мог понять что неверно, я и снабдил его соответствующими комментами... Там щас ответ получается Q=10.0 (null)/n Мне это не нравится... Еще я не знаю как вообще получить Q - как его в конце посчитать? Тот метод, который я использую, не проходит... |
------- Отправлено: 17:36, 04-12-2005 | #7 |
Старожил Сообщения: 278
|
Профиль | Отправить PM | Цитировать Sox
Воспользуйся советом mar Цитата:
Вот проанализоровал, что получили: 1. T[10]=temp[10];//* отправляем полученный ряд Т во временную папку temp*// возможно вываливается здесь, используй функцю strcpy, кажись так называется для копирования одной строки в другую, а этим оператором у тебя 11 элемент массива Т равен 11 элементу temp 2. temp[10]=Q[10]; см п.1 3. printf("Enter T: ", T[10] ) - неправильно, T[10] зачем, если у тебя нет в строке соответствующего %flag? 4. printf("Please, enter u:", u[1]); и printf("Please, enter v:", v[1]); см п.3 5. замени scanf("%s", T), и весь ввод данных в таком же духе... 6. После ввода всех данных выведи то что ты ввел и проверь, что данные введены правильно. 7. Да и вообще как твоя прога компилится, объясни?? 8. На счет массива из одного элемента, не проще так: 9. про циклы я уж молчу, ничего не понятно |
|
Последний раз редактировалось Zippy, 04-12-2005 в 18:05. Отправлено: 17:48, 04-12-2005 | #8 |
Старожил Сообщения: 278
|
Профиль | Отправить PM | Цитировать Цитата:
|
|
Отправлено: 17:52, 04-12-2005 | #9 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Duddits
Я не к элементу массива обращаюсь, а к самому массиву... U и v - это массивы, содержащие какой-либо символ...если можно все это сделать без использования массивов, то попрошу показать как... |
------- Отправлено: 17:53, 04-12-2005 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Обработка массивов данных, программа на паскале. Не могу найти ошибку в программе | yulia_hoi | Программирование и базы данных | 6 | 08-01-2010 14:50 | |
[решено] Прошу помочь | evm180 | Лечение систем от вредоносных программ | 23 | 24-02-2009 08:35 | |
Очень прошу помочь... | aviss | Выбор отдельных компонентов компьютера и конфигурации в целом | 6 | 09-08-2008 23:26 | |
Интерфейс - Прошу помочь со стайлбулдером ! | Tanr | Хочу все знать | 1 | 25-04-2008 19:36 | |
DRVSPACE. Очень прошу помочь! | dima123 | Microsoft Windows 95/98/Me (архив) | 3 | 27-02-2005 16:35 |
|