|
|
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
Народ! у меня проблема.. но она разрешимая.. просто по невнимательности, наверно, ... просто из-за проверки одной - полно ошибок вылазит. (проверка на символы перед и после искомого слова) Суть проги - в считывании строк из файла.. потом, нужно ввести слово с клавы и проверить, есть ли совпадения.. если есть, то вывести эту строку на экран. вот прототип файла, в формате txt.. его содержимое: Охотин Андрей Петрович 647669 1986 Кармозов Андрей Андреевич 627172 1986 Жук Алексей Сергеевич 357586 1986 --- здесь 30 символов - под имя, 6 под номер телефона и 4 под дату р. а вот код проги: #include "stdafx.h" #include "iostream.h" #include "stdio.h" #include "conio.h" #include "string.h" #include "ctype.h" #include "new.h" #include "windows.h" #include "math.h" #include "iomanip.h" #include "fstream.h" #include "iomanip.h" #include "stdlib.h" /*************************/ char bufRus[256]; char* Rus(const char *text) { CharToOem(text,bufRus); return bufRus; } /*------------------------*/ const int l_fio = 30; struct NOTE { public: char FIO[l_fio+1]; // Здесь храним Ф.И.О. int Phone;; // Здесь храним номер телефона int B_Day; // Здесь храним год рожления }; /*------------------------*/ int Sorting(const void *num1, const void *num2); int main() { NOTE Note[5]; FILE *file; file = fopen("F:\\phone.txt","r"); if(!file) { printf("%s\n",Rus("Ошибка открытия файла.")); getch(); return 1; } int i=0; while(!feof(file)) { fgets(Note .FIO,l_fio,file); fscanf(file,"%i%i\n",&Note.Phone,&Note.B_Day); i++; if(i>5) { printf("%s\n",Rus("Слишком много записей")); return 2; } } int n_record = i; char name[l_fio+1]; while(true) { printf("%s\n",Rus("Введите фамилию для поиска:")); printf("%s\n",Rus("Или нажмите <Enter> для выхода.")); gets(name); if(strlen(name) == 0) break; OemToChar(name,name); bool not_found = true; for(int i=0;i<n_record;i++) { char *p = Note.FIO; if(p = strstr(Note.FIO,name)) { char *c = p; if(c != Note.FIO) //Слово не в начале строки? if(!ispunct(*(c-1))&&!isspace(*(c-1))) //Символ перед словом не разделитель? continue; if(ispunct(*p) || isspace(*p) || (*p == '\0')) { CharToOem(Note.FIO,Note.FIO); printf("%30s %6i %4i\n",Note.FIO,Note.Phone,Note.B_Day); not_found = false; } } } if(not_found) printf("%s\n",Rus("Таких в списке нет!")); } printf("\n%s",Rus("Работа программы завершена!")); getch(); return 0; } проверьте, плизз.. Очень интересно, в чем же ошибка.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 12:47 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
Проглядел бегло, бросается в глаза следующие выражения Andrey_Ohotin char *p = Note.FIO; if(p = strstr(Note.FIO,name)) У вас проблемы с пониманием указателей и строк... В данном случае вы сравниваете не строки,а адреса... _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 13:06 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
для копирования использый strdup а для сравнения strcmp _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 13:13 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
synapseПроглядел бегло, бросается в глаза следующие выражения Andrey_Ohotin char *p = Note.FIO; if(p = strstr(Note.FIO,name)) Там все нормально. Первое - декларация указателя на char + присваивание адреса массива FIo структуры Note, нафиг ненужное, но вполне допустимое и безопастное. Второе равносильно следующему: Код: plaintext 1. 2. 3. 4. 2 автор вопроса Вы б хоть кнопочкой src попользовались чтоль - лично мне разбираться в таком неряшлевом оформлении просто лень, думаю большинству других тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 13:35 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
v6y synapseПроглядел бегло, бросается в глаза следующие выражения Andrey_Ohotin char *p = Note.FIO; if(p = strstr(Note.FIO,name)) Там все нормально. Первое - декларация указателя на char + присваивание адреса массива FIo структуры Note, нафиг ненужное, но вполне допустимое и безопастное. Второе равносильно следующему: Код: plaintext 1. 2. 3. 4. 2 автор вопроса Вы б хоть кнопочкой src попользовались чтоль - лично мне разбираться в таком неряшлевом оформлении просто лень, думаю большинству других тоже. Действительно прогнал, не разглядел что в if одно '='... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 13:48 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
synapse Щас глянул еще раз - у него Note объявляется как массив, а он к нему как к обычной переменной обращается: NOTE Note[5]; ... fgets(Note.FIO) - правильно например Note .FIO или Note->FIO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 13:55 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
v6y synapse Щас глянул еще раз - у него Note объявляется как массив, а он к нему как к обычной переменной обращается: NOTE Note[5]; ... fgets(Note.FIO) - правильно например Note .FIO или Note->FIO Опаньки Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 13:57 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
вот более понятная запись проги... так и не пойму.. в чем ошибка-то... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 15:01 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
Andrey_Ohotinвот более понятная запись проги... так и не пойму.. в чем ошибка-то... А что за ошибка? Что при компиляции выдается? Формально вроде все верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 15:18 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
v6y Andrey_Ohotinвот более понятная запись проги... так и не пойму.. в чем ошибка-то... А что за ошибка? Что при компиляции выдается? Формально вроде все верно. я сам не знаю! просто выскакивает окно.. что-то серьезное кажется.. но не просто ошибка компиляции.. что-то другое.. окошко выскакивает.. и именно из-за того момента, где я проверку на ссимволы делаю.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 15:35 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
Господин Andrey_Ohotin вы слышали про отладку? _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 15:45 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
rey_Ohotinя сам не знаю! просто выскакивает окно.. что-то серьезное кажется.. но не просто ошибка компиляции.. что-то другое.. окошко выскакивает.. и именно из-за того момента, где я проверку на ссимволы делаю.. Что за окно? Че в нем написано то? Запустите прогу в отладчике и проследите, где вылетает сообщение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 15:46 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
А так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 18:41 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
В догон: Проблема была в том, что ты не проверял, что возвращает fgets, а зря, поскольку при чтении последней строки файла eof еще не взведен - мы не перевели каретку. Именно вызов fgets при i = 3 возвел признак конца файла, а ты это и прозявил. В памяти для 4 элемента (i==3) у тебя остался стековый мусор, этот мусор и привел к ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 18:46 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
Andrey_Ohotin Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вот это первая фигня. Должно быть: Код: plaintext 1. 2. 3. 4. 5. 6. Andrey_Ohotin Код: plaintext Вот это вторая фигня. Должно быть: Код: plaintext Andrey_Ohotin Код: plaintext 1. 2. А вот это третья и самая страшная фигня. Надо читать строку в буфер, а потом ее расшифровывать для хранения. Что то вроде: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 18:52 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
White Owl Если код C++(а код C++, не смотря на то что используется libc, поскольку у автора компилировался исходный код ), то указанные п.1 и п.2 не являются означенными "фигнями". А по поводу п.3, то у автора наверняка файлы с фиксированной шириной столбцов (иначе, откуда взятся такой логике чтения из файла): Код: plaintext 1. 2. 3. 4. 5. "Щательнее надо" (c) МЖ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 19:03 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
Ну, зажаривает Андрей Петрович! Супер!!! Мы еще от "Массив! маленькая, интересная задачка.."-и не отошли, а он нам еще наготовил! А тут еще White Owl со своими придирками невтемными - 1ая фигня, вторая... Эх, если б мы, как Охотин Андрей, ничего не знали об отладчике и глазами бы ошибки искали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 19:29 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковЕсли код C++(а код C++, не смотря на то что используется libc, поскольку у автора компилировался исходный код ), то указанные п.1 и п.2 не являются означенными "фигнями". Если бы человек писал на C++ его код выглядел бы совершенно по другому. Тот факт что его код все же компилируется означает только то, что он использует C++ режим работы компилятора, для текста на С. Сколько глюков может вылезти только из этого, я рассказывать не буду. Анатолий ШироковА по поводу п.3, то у автора наверняка файлы с фиксированной шириной столбцов (иначе, откуда взятся такой логике чтения из файла): Откуда взялась такая логика чтения файла очень просто - не умеет человек работать со строками в С. Посмотрит на предложеный мной код - найдет много интересного... может быть :) Но на работу с фиксированой шириной столбцов исходник не походит никак. Ну никак он не будет работать хоть фиксированая там ширина хоть переменная. "Щательнее надо" (c) МЖ для SeraTJ: я не пользовался отладчиком :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 23:53 |
|
||
|
Ошибка!!! Проверка на пренадлежность символов... HELP!
|
|||
|---|---|---|---|
|
#18+
2 White Owl авторЕсли бы человек писал на C++ его код выглядел бы совершенно по другому. Тот факт что его код все же компилируется означает только то, что он использует C++ режим работы компилятора, для текста на С. Сколько глюков может вылезти только из этого, я рассказывать не буду. Некоторые используют C++, как улучшеный C и в этом ничего криминального нет, а вот о "С++ режиме компилятора для текста С" я слышу впервые и глюках в таком "режиме" тоже очень хотелось бы услышать - неужели был опыт? авторОткуда взялась такая логика чтения файла очень просто - не умеет человек работать со строками в С. Посмотрит на предложеный мной код - найдет много интересного... может быть :) Как раз, видно, что опыт-то у автора есть и идея в коде присутствует. То что вы ее не разглядели - это ваша проблема. автор Но на работу с фиксированой шириной столбцов исходник не походит никак. Ну никак он не будет работать хоть фиксированая там ширина хоть переменная. А работает ведь, если фиксированная: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Так что, не правда ваша! зы: вы либо не думаете, тогда зачем отвечать, либо мне не ясны мотивы столь поверхностных ответов с вашей стороны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 01:44 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=395&tid=2032906]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 315ms |

| 0 / 0 |
