Котуинко
Re: Котуинко
файл всегда будет пустой в двух случаях:
1) переменная i не изменяется. В этом случае цикл while ( s != '\0' ) превращается в while ( s[0] != '\0' ) и бесконечно крутится, до записи в файл никогда не дойдёт.
2) переменная i изменяется но строка не терминирована нулём (такие тоже есть), в этом случае цикл опять бесконечен, но при этом ещё и имеет место быть вылет за границы массива. До записи в файл опять никогда не дойдёт.
В общем, в этом примере есть явная ошибка - отсутствие i++, плюс имеется допущение, что строка всегда нуль-терминированная - значит, массив содержит хотя бы null, что делает корректным обращение к элементу с индексом 0, и гарантирует выход из цикла. Если строка не нуль-терминированная, то аж две возможности словить бяку: обращение к пустому массиву и бесконечность цикла.
Если в книжке подобное не описано - плохая книжка. Если описано - хорошая, а i++ просто ошибка, забыл он или наборщик-редактор-корректор... у меня на каждую сотню строк кода одна такая глупая ошибка находится
1) переменная i не изменяется. В этом случае цикл while ( s != '\0' ) превращается в while ( s[0] != '\0' ) и бесконечно крутится, до записи в файл никогда не дойдёт.
2) переменная i изменяется но строка не терминирована нулём (такие тоже есть), в этом случае цикл опять бесконечен, но при этом ещё и имеет место быть вылет за границы массива. До записи в файл опять никогда не дойдёт.
В общем, в этом примере есть явная ошибка - отсутствие i++, плюс имеется допущение, что строка всегда нуль-терминированная - значит, массив содержит хотя бы null, что делает корректным обращение к элементу с индексом 0, и гарантирует выход из цикла. Если строка не нуль-терминированная, то аж две возможности словить бяку: обращение к пустому массиву и бесконечность цикла.
Если в книжке подобное не описано - плохая книжка. Если описано - хорошая, а i++ просто ошибка, забыл он или наборщик-редактор-корректор... у меня на каждую сотню строк кода одна такая глупая ошибка находится
Последний раз редактировалось Martian Пн авг 19, 2024 17:18:47, всего редактировалось 1 раз.
- Реклама
Re: Котуинко
Никто не совершенен.

Re: Котуинко
что значит никто? Я! 
- главный колбасист
- Это не хвост, это антенна
- Сообщения: 1325
- Зарегистрирован: Чт авг 21, 2014 11:11:48
- Откуда: краснодарский край
- Контактная информация:
Re: Котуинко
BOB51 писал(а):Никто не совершенен.
Ну уж точно не я. По крайней мере в этом.Martian писал(а):что значит никто? Я!
Это действительно зависает при выполнении. выполняется бесконечный цикл?
Код: Выделить всё
main()
{
char s[80];
int i;
FILE *fin, *fout;
fin = fopen ( "input.dat", "r" );
fout = fopen ( "output.dat", "w" );
[color=#FF8040]while ( NULL != fgets ( s, 80, fin ) ) // читаем строку [/color]
{
i = 0; // начинаем с s[0]
while ( s[i] != '\0' ) // пока не конец строки
if ( s[i] == 'A' ) s[i] = 'Б'; // меняем символ
i++ ;
fprintf ( fout, "%s", s ); // выводим строку в файл
}
fclose ( fin );
fclose ( fout );
} Ставишь вместо не равно равно,тогда проходит. Значит не читает программка из моего файла input.dat ничего. Хотя лежат они все три в одной папке. И соответственно ничего не записывает в выходной. Как был пустым,так и остаётся.
Re: Котуинко
ну, надо знать, что за файл input.dat, может, там что-то юникодное. Может файл вообще не открывает, Вы же это не проверили. Теоретически, надо так:
Попробуйте запустить этот код без обработки строк и записи их. Вот как он есть. Если получите сообщение "Программа завершена" без иных сообщений, значит файлы открываются корректно, чтение входного файла тоже.
Добавлено after 18 minutes 16 seconds:
Можно немного удобнее записать тот же алгоритм действий, чтобы не размазывать ветвления по всему тексту:
В общем, следует помнить, что функции обычно всегда возвращают результат своей деятельности, и проверять его - это хорошо. Хотя и запарно иногда...
Код: Выделить всё
main()
{
char s[80];
int i;
FILE *fin, *fout;
if (fin = fopen("input.dat", "r") != NULL) // если файл для чтения открылся успешно
{
if (fout = fopen ("output.dat", "w") != NULL) // если файл для записи открылся успешно
{
while (fgets(s, sizeof(s), fin) != NULL) // читаем строку
{
//....здесь делаем операции со строками
}
fclose (fout);
}
else
{
printf ("Не могу открыть файл output.dat!\n");
}
fclose (fin);
}
else
{
printf ("Не могу открыть файл input.dat!\n");
}
printf ("Программа завершена\n");
} //main
Добавлено after 18 minutes 16 seconds:
Можно немного удобнее записать тот же алгоритм действий, чтобы не размазывать ветвления по всему тексту:
Код: Выделить всё
int main()
{
char s[80];
int i;
FILE *fin, *fout;
if (fin = fopen("input.dat", "r") == NULL) // если файл для чтения не открылся
{
printf ("Не могу открыть файл input.dat!\n");
return 1; // прекращаем работу программы
}
if (fout = fopen ("output.dat", "w") == NULL) // если файл для записи не открылся
{
printf ("Не могу открыть файл output.dat!\n");
return 1; // прекращаем работу программы
}
while (fgets(s, sizeof(s), fin) != NULL) // читаем строку
{
//....здесь делаем операции со строками
}
fclose (fout);
fclose (fin);
printf ("Программа завершена\n");
return 0;
} //main- Реклама
Re: Котуинко
Файлы разные бывают.
И совсем не обязательно символьная строка терминальным нулем закрывается.
Тот же Intel hex8 к примеру...
Да и использовать для тестов - тренировок нужно латиницу - ее все программы понимают без некорректностей.
С кириллицей и ОС и редактор текста "подкузьмить" могут.

И совсем не обязательно символьная строка терминальным нулем закрывается.
Тот же Intel hex8 к примеру...
Да и использовать для тестов - тренировок нужно латиницу - ее все программы понимают без некорректностей.
С кириллицей и ОС и редактор текста "подкузьмить" могут.
Re: Котуинко
ОС и редактор уже много лет как могут использовать UTF-8/16, и это должно быть настроено прям сразу после установки. Все древние неюникодные кодировки - анахронизм или узкоспециализированное.
- главный колбасист
- Это не хвост, это антенна
- Сообщения: 1325
- Зарегистрирован: Чт авг 21, 2014 11:11:48
- Откуда: краснодарский край
- Контактная информация:
Re: Котуинко
BOB51 писал(а):Да и использовать для тестов - тренировок нужно латиницу - ее все программы понимают без некорректностей.
Только не у меня. У меня всё древнее,WinXP и пр. , и мой DevC кириллицу пишет кракозябрами,Martian писал(а):С и редактор уже много лет как могут использовать UTF-8/16, и это должно быть настроено прям сразу после установки. Все древние неюникодные кодировки - анахронизм или узкоспециализированное.
в том числе и в комментариях.
з.ы.
После выполнения вышенаписанного вот чего.
- Вложения
-
- 2024-08-20_193125.jpg
- (26.38 КБ) 5506 скачиваний
Re: Котуинко
имя файла на кириллице!!!
этого больше всего DOS с простейшими (и "устаревшими") программами не переваривает...
Re: Котуинко
Приехали таки индикаторы в коробушках...
Симпатяшки,
https://img.radiokot.ru/files/20529/3j7oqqfki2.jpg
да еще и с платкой управления бонусом
https://img.radiokot.ru/files/20529/3j7oqrxjm5.jpg
соотношение размеров :
https://img.radiokot.ru/files/20529/3j7oqti4mz.jpg
внизу для сравнения "обычный" 1602.

Симпатяшки,
https://img.radiokot.ru/files/20529/3j7oqqfki2.jpg
да еще и с платкой управления бонусом
https://img.radiokot.ru/files/20529/3j7oqrxjm5.jpg
соотношение размеров :
https://img.radiokot.ru/files/20529/3j7oqti4mz.jpg
внизу для сравнения "обычный" 1602.
Re: Котуинко
Один (самый древний) я таки разобрал и к адуринке прицепил...
https://img.radiokot.ru/files/20529/3jhnuqkts1.jpg
Теперь второй вопрос...
Питание у самоделки в диапазоне от 5 до 3.0 вольта (обычный самоделка на аккумуляторе)...
Обычное регулирование контраста переменным резистором работает только при фиксированном напряжении питания.
Подкручивать явно не великое удовольствие.
А вот как и что удерживать на Vo стабильным автоматически,чтобы контраст оставался неизменным во всем диапазоне питающих напряжений?
Напряжение или ток?... И относительно чего - GND или + питания?
Видел варианты что на DSках (экзотика с программируемым потенциометром), что с источником тока на LM334...
А вот что есть истина?

https://img.radiokot.ru/files/20529/3jhnuqkts1.jpg
Теперь второй вопрос...
Питание у самоделки в диапазоне от 5 до 3.0 вольта (обычный самоделка на аккумуляторе)...
Обычное регулирование контраста переменным резистором работает только при фиксированном напряжении питания.
Подкручивать явно не великое удовольствие.
А вот как и что удерживать на Vo стабильным автоматически,чтобы контраст оставался неизменным во всем диапазоне питающих напряжений?
Напряжение или ток?... И относительно чего - GND или + питания?
Видел варианты что на DSках (экзотика с программируемым потенциометром), что с источником тока на LM334...
А вот что есть истина?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Котуинко
Истина есть питание от 3,3 с повышающим до 5 стабом
Добавлено after 1 minute 29 seconds:
Кстати, такой вариант и от 5 можно питать, т.к. повышающий до 5 стаб при питании от 5 превращается в проводник.
Добавлено after 1 minute 29 seconds:
Кстати, такой вариант и от 5 можно питать, т.к. повышающий до 5 стаб при питании от 5 превращается в проводник.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Котуинко
Оно то верно, да вот существование 10 позиционных семисегментников с питанием от 6 до 2,7/3 вольт даёт мыслю, что авто контраст возможен...

Re: Котуинко
Попались вот такие резисторы (накопались после очередной ревизии старого ....)...
https://img.radiokot.ru/files/20529/3jpdnrzv5u.jpg
куда б применить...?

https://img.radiokot.ru/files/20529/3jpdnrzv5u.jpg
куда б применить...?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Котуинко
Если на закате их бросить с горы, они красиво будут порхать в лучах солнца...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Котуинко
Да кто ж их знает.. Может где и пригодятся - это ж "тензорезисторы"...

- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Котуинко
Поверьте, лучше полета в лучах заката им применения не найти!
Все вещи, детали, предметы и т.п., которым не нашлось применения за предыдущие годы, надо выкинуть, и не ломать голову. Я недавно выкинул примерно с килограмм советских транзисторов... Еще раньше мешок 155й серии. Еще раньше полноразмерный картофельный мешок резисторов МЛТ... Сейчас готовлюсь выкинуть около сотни транзисторов "в металле"... Всем этим запасам лучшее место на свалке.
Добавлено after 2 minutes 40 seconds:
Вот единственное, о чем жалею, так это об отданных "во дворец пионеров" куче ГРИ... В ту пору АЛ307 казался невероятно крутым, а теперь... Эх...
Все вещи, детали, предметы и т.п., которым не нашлось применения за предыдущие годы, надо выкинуть, и не ломать голову. Я недавно выкинул примерно с килограмм советских транзисторов... Еще раньше мешок 155й серии. Еще раньше полноразмерный картофельный мешок резисторов МЛТ... Сейчас готовлюсь выкинуть около сотни транзисторов "в металле"... Всем этим запасам лучшее место на свалке.
Добавлено after 2 minutes 40 seconds:
Вот единственное, о чем жалею, так это об отданных "во дворец пионеров" куче ГРИ... В ту пору АЛ307 казался невероятно крутым, а теперь... Эх...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Котуинко
У меня из МП42 получаются неплохие кнопки.
Re: Котуинко
"...
32-разрядный 8051 Cortex MCU серии 32G
Сверхвысокая скорость 32-разрядного ядра 8051 с одной тактовой частотой за машинный цикл, которая называется 1T и скорость примерно в 70 раз выше, чем у традиционного 8051.
..."
( https://www.stcmicro.com/stc/stc32g.html
https://www.stcmicro.com/stc/stc32g12k128.html )
ГЫММ...
Так Cortex MCU или 8051 ???
и доки на китайском...

32-разрядный 8051 Cortex MCU серии 32G
Сверхвысокая скорость 32-разрядного ядра 8051 с одной тактовой частотой за машинный цикл, которая называется 1T и скорость примерно в 70 раз выше, чем у традиционного 8051.
..."
( https://www.stcmicro.com/stc/stc32g.html
https://www.stcmicro.com/stc/stc32g12k128.html )
ГЫММ...
Так Cortex MCU или 8051 ???
и доки на китайском...
Re: Котуинко
[uquote="BOB51",url="/forum/viewtopic.php?p=4625954#p4625954"]"...32-разрядный 8051 Cortex MCU серии 32G[/uquote]
Написали на сайте Cortex а надо было Core Ошибочка по Фрейду
Написали на сайте Cortex а надо было Core Ошибочка по Фрейду
Audiatur et altera pars !


