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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Переделывание" букв в что-то другое 
:(
    Опции темы
mr.Anderson
Дата 9.3.2006, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Помогите пожалуйста! Никак в толк не возьму, в чем дело! Пишу следующее:
Код

if(s=='я') fprintf(nfile,"%s","ya");


Можете себе представить, не работает! Между прочим, вот такая строчка:
Код

if(s=='ю') fprintf(nfile,"%s","yu");


Работает! Что за дела! Помогите плиз исправить!


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
sergejzr
Дата 9.3.2006, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Давай больше кода. Что такое s? И как "не работает"? не пишется, не реагирует. Как?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
The Thing
Дата 9.3.2006, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот не помню точно.. но через принтф у меня была такая же байда..какая именно не помню, но именно буква я там выступала в роле чего-то другого.

Короче напиши отлавливает она 'я' или нет? (помоему с этимм проблема была.) пиши код буквы 'я'ВСЕ!


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
mr.Anderson
Дата 9.3.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



sergej.z, s - символьная переменная (тип char). Не работает - в смысле в целевом файле нужная комбинация ya не появляется.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 9.3.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Пробовал вот такое сделать:
Так. Попробовал как вариант вписать код буквы Я.
Код

if(s=='\xFF') fprintf(nfile,"%s","ya");

Т.е. вписать вместо "я" ее код. Бесполезняк.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 9.3.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Если это важно. ОС: WinXP. Компилер: Borland C++ Builder 6.0.

Код (это все, что относится к моему вопросу!):
Код

void func(void);
//---------------------------//

void main(void)
{
 func();
}
//---------------------------//

void func(void)
{
 FILE *file;
 file=fopen("nt.txt","w");
 char s;
 while((s=getc(file))!=EOF)
  if(s=='я') fprintf(file,"%s","ya");

 fclose(file);
}



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
nikitao
Дата 9.3.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

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



sim7, а заглавная 'я' работает?


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
mr.Anderson
Дата 9.3.2006, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



nikitao, нет.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Бонифаций
Дата 10.3.2006, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



постойте ка, вы куда пишете? Неужели в тот же файл из которого читаете ?? smile


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
maxim1000
Дата 10.3.2006, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(sim7 @ 9.3.2006, 21:14 Найти цитируемый пост)
while((s=getc(file))!=EOF)
  if(s=='я') fprintf(file,"%s","ya");

код буквы char('я')=-1 (т.к. по умолчанию char считается знаковым)
EOF тоже равен -1
вот и получается, что буква 'я' путается с признаком конца файла
выход такой:
сначала присвоить результат getc какой-нибудь целой переменной
потом проверить на равенство -1
а потом - присвоить s...


--------------------
qqq
PM WWW   Вверх
shad0w
Дата 10.3.2006, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



undigned char s;
PM MAIL   Вверх
mr.Anderson
Дата 10.3.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Бонифаций, нет, читается из одного, пишется в другой. Я не настолько глуп, чтобы понять, что с одним и тем же файлом эти две операции выполнять нельзя. smile

shad0w, не работает.

maxim1000, попробую.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 10.3.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Не сработало.
Вот такое для интереса написал:
Код

void main(void)
{
 FILE *file;
 file=fopen("nt.txt","w");
 fclose(file);
 
 file=fopen("nt.txt","rb");
 int s;
 while(!feof(file))
 {
  s=fgetc(file);
  if(s==EOF) break;
  if(s==(unsigned char)'я') printf("Yes!");
  else printf("No!");
 }
 fclose(file);
 getch();
}

Не работает. Не появляется в консольном окошке ни YES, ни NO.
Добавлено @ 17:49
Немного подправил код. Вот так:
Код

void main(void)
{
 FILE *file;
 file=fopen("nt.txt","w");
 fclose(file);
 
 file=fopen("nt.txt","rb");
 int s;
 while(!feof(file))
 {
  s=fgetc(file);
//  if(s==EOF) break; <---- Вот эту строчку убрал
  if(s==(unsigned char)'я') printf("Yes!");
  else printf("No!");
 }
 fclose(file);
 getch();
}

Сработало. Вот только в консольном окошке появилось NO. Хотя в файле, который код роет, написана буковка Я.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Darhazer
Дата 10.3.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

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



Попробуйте так:
Код

void main(void)
{
 FILE *file;
 file=fopen("nt.txt","w");
 fclose(file);
 
 file=fopen("nt.txt","rb");
 int s;
 while(!feof(file))
 {
  s=fgetc(file);
  //if(s==EOF) break;
  if(s=='я') printf("Yes!");
  else printf("No!");
 }
 fclose(file);
 getch();
}

У вас же уже есть проверка на feof, и она работаеть с 0, а не с -1, зачем вам проверят и s на eof, если знаете, что eof == 'я'

P.S. NO появилось, потому что проверяете на (unsigned char) 'я', а s - signed char

Это сообщение отредактировал(а) Darhazer - 10.3.2006, 17:56


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
mr.Anderson
Дата 10.3.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Darhazer, от меня плюс в репутацию. Большое спасибо!
Добавлено @ 17:59
Всем, кто отвечал, тоже спасибо за старание. Вопрос решен.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 10.3.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Стоп-с! Рановато я обрадовался. Появилась еще более серьезная проблема.
Буква "я"-то заработала. Да вот только теперь она стала дописываться в конец всего текста. Вроде, решение понятно: просто "отрезать" два последних символа ("ya") из текста. И вывести отредактированный. Да вот только не получилось так. Почему-то иногда "я" писалась, а иногда нет! И чаще получалось так, что у меня обрезались нужные символы. Скажем, писал
"папа", а вместо "papa" получал "pap". Долго бился, но ничего не вышло.

P.S. Знаю, знаю, чего вы потребуете. Больше кода! Как "оживлю" программу, выложу код. Через день-два.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
maxim1000
Дата 10.3.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

 while(true)
 {
  s=fgetc(file);
  if(s==EOF) break;
  if((char)s=='я') printf("Yes!");
  else printf("No!");
 }

лучше привести s при сравнении с 'я'...
Добавлено @ 21:50
Цитата(sim7 @ 10.3.2006, 20:09 Найти цитируемый пост)
Да вот только теперь она стала дописываться в конец всего текста

а это уже вполне точно указывает на то, что конец файла принимается за я
странно только, почемон все-таки выходит...
Добавлено @ 21:54
а... все smile

Цитата(sim7 @ 10.3.2006, 16:42 Найти цитируемый пост)
while(!feof(file))
while(!feof(file))
{
  s=fgetc(file);
  if(s==EOF) break;
  if(s==(unsigned char)'я') printf("Yes!");
  else printf("No!");
}

по if(s==EOF) break; оно выходить не может, иначе вышло бы до printf("Yes!")
значит, оно выходит из-за !feof(file)
а это значит, что последний "несуществующий" символ конца файла читается, а уже после этого устанавливается feof
а это, в свою очередь, значит, что проверять на конец файла нужно ПОСЛЕ чтения...
Код

while(true)
 {
  s=fgetc(file);
  if(feof(file))
    break;
  if(s==(unsigned char)'я') printf("Yes!");
  else printf("No!");
 }



--------------------
qqq
PM WWW   Вверх
Dov
Дата 10.3.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Попробуй do - while
Код

 do
 {
     s = getc(file);
     if(s == 'я')
         printf("%s","ya");

 }while (s != EOF);

то есть сначала присваивай (s = getc(file)) и печатай (printf("%s","ya")), а потом проверяй (while (s != EOF) )

Это сообщение отредактировал(а) Dov - 10.3.2006, 23:10


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Dov
Дата 11.3.2006, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Так, пожалуй, будет лучше
Код

int s;

do
{
    s = fgetc(file);
    if(s == (unsigned char)'я')
    {// здесь вывод на экран
        printf("%s\n","ya");
        s = fgetc(file);
    }
    // это просто для проверки
    //else
    //    printf("%s\n","no");

}while(s != EOF);



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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