Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает, Почему не знаю 
:(
    Опции темы
Elfet
  Дата 18.5.2003, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



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 и вышел из функции
а он не сравнивает!
так и продолжает цыкл до конца файла.
Как сделать чтоб он смог найти нужное и выйти,?


--------------------
PM MAIL WWW Skype   Вверх
DENNN
Дата 18.5.2003, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



m и name у тебя объявлены как массивы char, поэтому поэтому выражение вида m означат ссылку на первый элемент массива. Поэтому сравниваются не строки, а значения ссылок.
PM ICQ   Вверх
DarkDS
Дата 19.5.2003, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: нет
Всего: 16



Дополнение к предидушему smile.gif
if(m == name)
нужно заменить на
if(strcmp(m, name) == 0 )

PM MAIL   Вверх
RAN
Дата 19.5.2003, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Кроме того, так для общего развития, строка в кавычках уже подрузумевает ноль в конце и если содержимое массива fname - константа, то можно и даже нужно писать fname[] = "text.txt", а если не константа, то сначала описывают массив, а потом копируют в него значения (char fname[30]; strcpy(fname, "text.txt");)
return не надо заключать в {}.

PM MAIL ICQ   Вверх
DENNN
Дата 19.5.2003, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
константа, то можно и даже нужно писать fname[] = "text.txt",

Цитата
return не надо заключать в {}.

Это стиль программирования, а не обязательное требование. К вопросу не относится smile.gif
PM ICQ   Вверх
HexoGenus
Дата 19.5.2003, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



char fname[30] = "text.txt\0";
Это не стиль программирования а излишний код smile.gif ноль действительно не нужен при использовании кавычек
char fname[30] = "text.txt";
и почему 30? от балды?
если размер не меняется то как сказал RAN лучше
char fname[] = "text.txt";
или потом возможно содержимое fname поменяется? тогда лучше
char fname[MAX_PATH] = "text.txt";
(лишние символы автоматом инициилизируются нулями)

а стиль smile.gif
не очень то красиво...
где вы тут стиль увидели...
программа то после исправления будет работать но стиля оформления тут и близко нет...

одна команда пишется в три строки
if((in = fopen(fname, "rt")) == NULL)
{
return;
}
а две команды в одну smile.gif
if(m == name){ fclose(in); return; };
да еще и ; после фигурных скобок smile.gif
лучше бы эти два куска оформить наоборот

Я все это говорю не к тому что хочу человека обидеть...
сам и учу и учусь smile.gif а к тому что стиль оформления становится привычкой и если на него не обращать внимания то со временем себя будет трудно переламывать...
(к примеру у меня почти полное отсутствие запятых)
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
DENNN
Дата 19.5.2003, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
char fname[MAX_PATH] = "text.txt";
(лишние символы автоматом инициилизируются нулями)

Это в начале, а в процессе перезаписи в этот буфер более короткой строки уже не все smile.gif


Цитата
char fname[30] = "text.txt";
и почему 30? от балды?

Потому что, возможно в дальнейшем требуется буфер именно такого размера smile.gif Гипотетически предполагая, мы же не знаем что дальше в коде происжодит?

Цитата
или потом возможно содержимое fname поменяется? тогда лучше
char fname[MAX_PATH] = "text.txt";

Ай-ай smile.gif а ведь только что товарища попрекал:
Цитата
Это не стиль программирования а излишний код


Это сообщение отредактировал(а) DENNN - 19.5.2003, 20:54
PM ICQ   Вверх
DENNN
Дата 19.5.2003, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Другими словами, рассуждение о стиле - это больше во флейм, а если уж попрекать другого, то хотя бы себе при этом не противоречить.
Без обид. Ничего лишнего. Просто человек конкретный вопрос задал, а вы ему уже все кости перемыли smile.gif
PM ICQ   Вверх
Fantasist
Дата 19.5.2003, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Поддержу HexoGenus. Все взаимосвязанно: если у человека в коде бардак, то это показывает небрежный подход к написанию программы, а это уже весьма существенное качество.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
TimPP
Дата 23.5.2003, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 22.5.2003

Репутация: нет
Всего: нет



Ни чего страшного, пару раз на грабли наступит типа:

Цитата

if(m == name){ fclose(in); return; };


... в этой строчке нельзя поставить BreakPoint на выполнение условия.

И все встанет на свои места.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.