| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Не работает |
| Автор: Elfet 18.5.2003, 10:05 |
| void Tf::mo(char m[30]) { char fname[30] = "text.txt\0"; FILE *in; if((in = fopen(fname, "rt")) == NULL) { return; } char name[30]; while(!feof(in)){ fscanf(in, "%s %d %d", &name, &yd, &la); if(m == name){ fclose(in); return; }; } fclose(in); } Нужно чтоб он сравнил m c name и вышел из функции а он не сравнивает! так и продолжает цыкл до конца файла. Как сделать чтоб он смог найти нужное и выйти,? |
| Автор: DENNN 18.5.2003, 14:24 |
| m и name у тебя объявлены как массивы char, поэтому поэтому выражение вида m означат ссылку на первый элемент массива. Поэтому сравниваются не строки, а значения ссылок. |
| Автор: DarkDS 19.5.2003, 12:30 |
| Дополнение к предидушему if(m == name) нужно заменить на if(strcmp(m, name) == 0 ) |
| Автор: RAN 19.5.2003, 17:33 |
| Кроме того, так для общего развития, строка в кавычках уже подрузумевает ноль в конце и если содержимое массива fname - константа, то можно и даже нужно писать fname[] = "text.txt", а если не константа, то сначала описывают массив, а потом копируют в него значения (char fname[30]; strcpy(fname, "text.txt");) return не надо заключать в {}. |
| Автор: DENNN 19.5.2003, 19:06 | ||||
Это стиль программирования, а не обязательное требование. К вопросу не относится |
| Автор: HexoGenus 19.5.2003, 20:33 |
| char fname[30] = "text.txt\0"; Это не стиль программирования а излишний код char fname[30] = "text.txt"; и почему 30? от балды? если размер не меняется то как сказал RAN лучше char fname[] = "text.txt"; или потом возможно содержимое fname поменяется? тогда лучше char fname[MAX_PATH] = "text.txt"; (лишние символы автоматом инициилизируются нулями) а стиль не очень то красиво... где вы тут стиль увидели... программа то после исправления будет работать но стиля оформления тут и близко нет... одна команда пишется в три строки if((in = fopen(fname, "rt")) == NULL) { return; } а две команды в одну if(m == name){ fclose(in); return; }; да еще и ; после фигурных скобок лучше бы эти два куска оформить наоборот Я все это говорю не к тому что хочу человека обидеть... сам и учу и учусь (к примеру у меня почти полное отсутствие запятых) |
| Автор: DENNN 19.5.2003, 20:49 | ||||||||
Это в начале, а в процессе перезаписи в этот буфер более короткой строки уже не все
Потому что, возможно в дальнейшем требуется буфер именно такого размера
Ай-ай
|
| Автор: DENNN 19.5.2003, 20:52 |
| Другими словами, рассуждение о стиле - это больше во флейм, а если уж попрекать другого, то хотя бы себе при этом не противоречить. Без обид. Ничего лишнего. Просто человек конкретный вопрос задал, а вы ему уже все кости перемыли |
| Автор: Fantasist 19.5.2003, 23:00 |
| Поддержу HexoGenus. Все взаимосвязанно: если у человека в коде бардак, то это показывает небрежный подход к написанию программы, а это уже весьма существенное качество. |
| Автор: TimPP 23.5.2003, 11:59 | ||
Ни чего страшного, пару раз на грабли наступит типа:
... в этой строчке нельзя поставить BreakPoint на выполнение условия. И все встанет на свои места. |