![]() |
Прошу помочь найти ошибку в программе.
Всем привет! :)
У меня вот возник такой вопрос, на который я уже совершенно не знаю ответа.... я как бы занимаюсь в данное время изучением программирования на языке С с использованием массивов и на данном этапе передо мной встал такой вопрос: необходимо написать программу: Вводится ряд Т, состоящий из символов, затем вводятся значения символов 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. Кто-нибудь может подсказать почему? Спасибо.... :) |
Ну вооот... уже 11 человек сюда посмотрели и никто ничего не ответил.... что, неужели это ТАК сложно?
|
Цитата:
может попробовать просто scanf("%s", T); Кстати, и зачем необходимо использовать массив из одного!! элемента??? Потом непонятно зачем нужно два цикла? Может я чего-то не догоняю, но прога кривая Остальное лень разбирать, хоть бы пост оформил по нормальному... |
Не понял,зачем тебе u и v как массивы???
Что за извращение иметь массив содержащий одно значение?? К тому же когда обращаешься к первому элементу массива,то надо v[0] ато так ты вылетаешь за границы массива. ПО крайней мере если писать под винду то это так Под Никсы не писал никогда |
Duddits
первый элемент массива зависит не от ОС, а от спецификации языка C =) И он действительно 0-ой - Вы абсолютно правы. Sox ну собственно, ребята уже поотвечали. Внесу свои 5 копеек вроде бы не по прямому вопросу, нео имхо по теме. Есть разные способы выяснять, что в программе где сломалось, - можно использовать специальные среды разработки, позволяющие пошаговую трассировку и обозначение точек останова. А можно в простейших случаях и для небльших программ сделать это вручную: Если программа валится, попробуйте выяснить где именно. Для этого можно пошагово с первых строчек ставить printf результата на этот момент (или значение какой-либо переменной) и выход из фуенции/программы. Таким образом в маленькой программе очень быстро находится непотребное =) место. Дальше смотрится на него пристально и думается в чем ошибка :) Если не придумывается, - пишется сюда :) ps а код, действительно надо оформлять так, чтоб его можно было читать (со всеми отступами и по всем правилам). В этом форуме для этого служит тег-контейнер [code] |
Zippy
Ну так я и говорю о том, что прога кривая и прошу написать как это дело исправить... а то я и сам не догоняю этого...я же не писал, что прошу найти ошибку в нормально работающей программе вроде бы.... и чем не нравится оформление поста? Я пробовал использовать тег вставки кода на форуме, но оформление от этого только хуже... Нет, вариант scanf("%s", T) не прокатывает... массивы с одним значением нужны чтобы их сравнивать с элементами ряда. Если оставить их как просто u, v... то будет ошибка в сравнении.... переменной с массивом... |
mar
Ну собственно мне мало че понятно из их ответов... можно попросить как бы чтобы ответы содержали какие-либо конкретные указания для компилятора, что и как он должен делать... в сущности ведь программа достаточно простая... и для человека, который действительно разбирается в этом вопросе не должно составить труда объяснить мне как начинающему как исправить эту программу в таком ключе, чтобы она заработала...а то она отказывается... mar насколько я слышал от других, что-то неверно в самом алгоритме действий... чтобы знающий человек мог понять что неверно, я и снабдил его соответствующими комментами... Там щас ответ получается Q=10.0 (null)/n Мне это не нравится... Еще я не знаю как вообще получить Q - как его в конце посчитать? Тот метод, который я использую, не проходит... |
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. На счет массива из одного элемента, не проще так: Код:
chat u, v; |
Цитата:
|
Duddits
Я не к элементу массива обращаюсь, а к самому массиву... U и v - это массивы, содержащие какой-либо символ...если можно все это сделать без использования массивов, то попрошу показать как... :) |
Zippy
Щас посмотрим... ![]() |
Вот код:
Код:
#include <stdio.h> |
Щас потестим... если заработает, кидай адрес, пришлю!
:) На первый взгляд выглядит неплохо! :) |
Хм, странный здесь контейнер code, куда он все пробелы мои дел в начале каждой строки? Да и еще это полоса прокрутки, неудобно с ней...
|
Zippy
И правда работает! Кидай свой адрес куда-нибудь, такая помощь не может остаться без вознаграждения... :) |
mar
Ну скорее зависит от компиллятора имхо..... |
Время: 07:39. |
Время: 07:39.
© OSzone.net 2001-