307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
|
||||||
1 | ||||||
Получить от пользователя фамилию и вывести из этого файла инициалы и год рождения этого человека04.08.2011, 17:17. Показов 4164. Ответов 21
Метки нет (Все метки)
Здравствуйте. Имеется файл, из которого считываются строки вида
0
|
04.08.2011, 17:17 | |
Ответы с готовыми решениями:
21
Написать функцию генерации email (для этого запросить у пользователя имя, год рождения, почтовый сервер) Запросить фамилию, имя и отчество пользователя, и вывести его фамилию и инициалы Объявить структуру Humen, включающую имя человека, фамилию и год рождения Описать тип-структуру «Человек», хранящую имя, фамилию и год рождения человека |
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
04.08.2011, 17:22 | 2 |
функция fgets() не удаляет '\n', поэтому считанная строка имеет вид: "......\n\0", да и при вызове strtok() в качестве разделителей нужно больше символов указывать, например, " ,.;:\t\n". Также при сравнении strcmp() регистр учитывается (на всякий случай)
0
|
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
|
|
04.08.2011, 17:27 [ТС] | 3 |
Что порекомендуете предпринять? Я, честно сказать, не понимаю, мешает ли это. Есть \n, ну и что? Почему условие-то выполняется?
А если не нужно по задаче? Вот незачем мне туда добавлять мусор еще, только запутаюсь. Или имеется ограничение, что меньше двух разделителей, например, нельзя указывать? На cppreference.com ничего не сказано об этом. учтено
0
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
04.08.2011, 17:30 | 4 |
AK3RN, strcmp в случае равенства возвращает 0. Так что условие выполняется как-раз когда строки не равны.
1
|
Заблокирован
|
||||||
04.08.2011, 17:32 | 5 | |||||
Согласласен
Ещё лучше не юзать fgets а считывать в буфер всё содержимое файла, как видишь код от этого почти не меняется
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
||||||
04.08.2011, 17:33 | 6 | |||||
" .,;:\n\t" - это не мусор, это разделители слов. Смотрите, функция fgets() считала, например, строку "abc\n", Вы вызываете strtok с параметром ".", после этого ps="abc\n". Если это слово сравнить с "abc", то strcmp() скажет, что слова не равны, поэтому '\n' надо убрать. Вот код
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
04.08.2011, 17:37 | 9 |
Да, и это тоже конечно, что-то я упустила этот момент, спасибо
Добавлено через 1 минуту Человек '\n' не увидит и не поймет в чем дело
0
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
04.08.2011, 17:39 | 10 |
0
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
04.08.2011, 17:41 | 12 |
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
04.08.2011, 17:41 | 13 |
Все правильно, только вот человек боится параметры strtok() менять, мусором это называет, ему так скажите
0
|
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
|
|
04.08.2011, 17:47 [ТС] | 14 |
-=ЮрА=-, разобрался.
А что это, если не мусор? Если бы мне нужно было делить строку по пробелам И точкам, я бы добавил пробел. Но зачем мне лишние разделители? Я еще раз спрашиваю, strtok() не работает с одним разделителем? аргументируйте, коль крикнули. Всем спасибо.
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
04.08.2011, 17:50 | 15 |
Пост 6 прочитайте еще раз, там пример. Если у вас функция fgets(), то как минимум '\n' надо добавить в strtiok().
0
|
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
|
|
04.08.2011, 17:56 [ТС] | 16 |
0
|
04.08.2011, 18:05 | 17 | |||||
Зачем постояно токенировать строку если можно первые N = strlen(name) символы сравнивать, вот пример кода, поиск по-фамилии без учёта регистра.
0
|
kazak
|
|||||
05.08.2011, 04:53
Получить от пользователя фамилию и вывести из этого файла инициалы и год рождения этого человека
#20
|
|||||
Не по теме: -=ЮрА=-, правильно все таки будет
0
|
05.08.2011, 04:53 | |
05.08.2011, 04:53 | |
Помогаю со студенческими работами здесь
20
Описать тип-структуру «Человек», хранящую имя, фамилию и год рождения человека Вывести фамилию, инициалы и высчитать возраст на текущий год Вывести таблицей фамилию, год рождения, оценку за первую и вторую сессию Определить самого старшего человека из списка и вывести его фамилию, имя и дату рождения Вывести данные о студентах: номер, фамилию, год рождения, пол, курс, вид спорта Известны год и номер месяца рождения человека, определить возраст человека Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |