Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Прошу помочь найти ошибку в программе.

Ответить
Настройки темы
Прошу помочь найти ошибку в программе.
Sox Sox вне форума

Аватара для Sox

Пользователь


Сообщения: 54
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Sox
Дата: 04-12-2005
Всем привет!
У меня вот возник такой вопрос, на который я уже совершенно не знаю ответа....
я как бы занимаюсь в данное время изучением программирования на языке С с использованием массивов и на данном этапе передо мной встал такой вопрос:
необходимо написать программу:
Вводится ряд Т, состоящий из символов, затем вводятся значения символов 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

 
Sox Sox вне форума Автор темы

Аватара для Sox

Пользователь


Сообщения: 54
Благодарности: 1

Профиль | Отправить PM | Цитировать


Ну вооот... уже 11 человек сюда посмотрели и никто ничего не ответил.... что, неужели это ТАК сложно?

-------
-Мы - за собак...
-А мы - ЗаПЧЕЛ


Отправлено: 14:00, 04-12-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Zippy

Старожил


Сообщения: 278
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата:
&T[10]
что за туфта?
может попробовать просто scanf("%s", T);
Кстати, и зачем необходимо использовать массив из одного!! элемента???
Потом непонятно зачем нужно два цикла?
Может я чего-то не догоняю, но прога кривая
Остальное лень разбирать, хоть бы пост оформил по нормальному...

Отправлено: 15:56, 04-12-2005 | #3


Аватара для Duddits

Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Не понял,зачем тебе u и v как массивы???
Что за извращение иметь массив содержащий одно значение??
К тому же когда обращаешься к первому элементу массива,то надо v[0] ато так ты вылетаешь за границы массива.
ПО крайней мере если писать под винду то это так
Под Никсы не писал никогда

-------
Если вам советуют использовать v.begin() вместо &v[0] - меняйте круг общения!


Отправлено: 16:15, 04-12-2005 | #4

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


Duddits
первый элемент массива зависит не от ОС, а от спецификации языка C И он действительно 0-ой - Вы абсолютно правы.
Sox
ну собственно, ребята уже поотвечали. Внесу свои 5 копеек вроде бы не по прямому вопросу, нео имхо по теме. Есть разные способы выяснять, что в программе где сломалось, - можно использовать специальные среды разработки, позволяющие пошаговую трассировку и обозначение точек останова. А можно в простейших случаях и для небльших программ сделать это вручную:
Если программа валится, попробуйте выяснить где именно. Для этого можно пошагово с первых строчек ставить printf результата на этот момент (или значение какой-либо переменной) и выход из фуенции/программы. Таким образом в маленькой программе очень быстро находится непотребное место. Дальше смотрится на него пристально и думается в чем ошибка Если не придумывается, - пишется сюда
ps а код, действительно надо оформлять так, чтоб его можно было читать (со всеми отступами и по всем правилам). В этом форуме для этого служит тег-контейнер [code]

Отправлено: 17:19, 04-12-2005 | #5

Sox Sox вне форума Автор темы

Аватара для Sox

Пользователь


Сообщения: 54
Благодарности: 1

Профиль | Отправить PM | Цитировать


Zippy
Ну так я и говорю о том, что прога кривая и прошу написать как это дело исправить... а то я и сам не догоняю этого...я же не писал, что прошу найти ошибку в нормально работающей программе вроде бы.... и чем не нравится оформление поста? Я пробовал использовать тег вставки кода на форуме, но оформление от этого только хуже...
Нет, вариант scanf("%s", T) не прокатывает...
массивы с одним значением нужны чтобы их сравнивать с элементами ряда.
Если оставить их как просто u, v... то будет ошибка в сравнении.... переменной с массивом...

-------
-Мы - за собак...
-А мы - ЗаПЧЕЛ


Отправлено: 17:32, 04-12-2005 | #6

Sox Sox вне форума Автор темы

Аватара для Sox

Пользователь


Сообщения: 54
Благодарности: 1

Профиль | Отправить PM | Цитировать


mar
Ну собственно мне мало че понятно из их ответов... можно попросить как бы чтобы ответы содержали какие-либо конкретные указания для компилятора, что и как он должен делать... в сущности ведь программа достаточно простая... и для человека, который действительно разбирается в этом вопросе не должно составить труда объяснить мне как начинающему как исправить эту программу в таком ключе, чтобы она заработала...а то она отказывается...

mar

насколько я слышал от других, что-то неверно в самом алгоритме действий... чтобы знающий человек мог понять что неверно, я и снабдил его соответствующими комментами...
Там щас ответ получается Q=10.0 (null)/n
Мне это не нравится...
Еще я не знаю как вообще получить Q - как его в конце посчитать? Тот метод, который я использую, не проходит...

-------
-Мы - за собак...
-А мы - ЗаПЧЕЛ


Отправлено: 17:36, 04-12-2005 | #7


Аватара для Zippy

Старожил


Сообщения: 278
Благодарности: 2

Профиль | Отправить PM | Цитировать


Sox
Воспользуйся советом mar
Цитата:
Если программа валится, попробуйте выяснить где именно. Для этого можно пошагово с первых строчек ставить printf результата на этот момент...
А также воспользуйся контейнером code...

Вот проанализоровал, что получили:
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. На счет массива из одного элемента, не проще так:
Код: Выделить весь код
chat u, v;
if(Q[i] == u)
9. про циклы я уж молчу, ничего не понятно

Последний раз редактировалось Zippy, 04-12-2005 в 18:05.


Отправлено: 17:48, 04-12-2005 | #8


Аватара для Zippy

Старожил


Сообщения: 278
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата:
что-то неверно в самом алгоритме действий
гыгы, по-моему там асболютно все неверно!!!

Отправлено: 17:52, 04-12-2005 | #9

Sox Sox вне форума Автор темы

Аватара для Sox

Пользователь


Сообщения: 54
Благодарности: 1

Профиль | Отправить PM | Цитировать


Duddits
Я не к элементу массива обращаюсь, а к самому массиву... U и v - это массивы, содержащие какой-либо символ...если можно все это сделать без использования массивов, то попрошу показать как...

-------
-Мы - за собак...
-А мы - ЗаПЧЕЛ


Отправлено: 17:53, 04-12-2005 | #10



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Прошу помочь найти ошибку в программе.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Обработка массивов данных, программа на паскале. Не могу найти ошибку в программе 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




 
Переход