Котуинко

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Котуинко

Сообщение Martian »

файл всегда будет пустой в двух случаях:
1) переменная i не изменяется. В этом случае цикл while ( s != '\0' ) превращается в while ( s[0] != '\0' ) и бесконечно крутится, до записи в файл никогда не дойдёт.
2) переменная i изменяется но строка не терминирована нулём (такие тоже есть), в этом случае цикл опять бесконечен, но при этом ещё и имеет место быть вылет за границы массива. До записи в файл опять никогда не дойдёт.

В общем, в этом примере есть явная ошибка - отсутствие i++, плюс имеется допущение, что строка всегда нуль-терминированная - значит, массив содержит хотя бы null, что делает корректным обращение к элементу с индексом 0, и гарантирует выход из цикла. Если строка не нуль-терминированная, то аж две возможности словить бяку: обращение к пустому массиву и бесконечность цикла.

Если в книжке подобное не описано - плохая книжка. Если описано - хорошая, а i++ просто ошибка, забыл он или наборщик-редактор-корректор... у меня на каждую сотню строк кода одна такая глупая ошибка находится
Последний раз редактировалось Martian Пн авг 19, 2024 17:18:47, всего редактировалось 1 раз.
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15554
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Никто не совершенен.
8)
Реклама
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Котуинко

Сообщение Martian »

что значит никто? Я! :)))
Аватара пользователя
главный колбасист
Это не хвост, это антенна
Сообщения: 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 ничего. Хотя лежат они все три в одной папке. И соответственно ничего не записывает в выходной. Как был пустым,так и остаётся.
Реклама
Эиком - электронные компоненты и радиодетали
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Котуинко

Сообщение Martian »

ну, надо знать, что за файл input.dat, может, там что-то юникодное. Может файл вообще не открывает, Вы же это не проверили. Теоретически, надо так:

Код: Выделить всё

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
В общем, следует помнить, что функции обычно всегда возвращают результат своей деятельности, и проверять его - это хорошо. Хотя и запарно иногда...
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15554
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Файлы разные бывают.
И совсем не обязательно символьная строка терминальным нулем закрывается.
Тот же Intel hex8 к примеру...
Да и использовать для тестов - тренировок нужно латиницу - ее все программы понимают без некорректностей.
С кириллицей и ОС и редактор текста "подкузьмить" могут.
:tea:
Реклама
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Котуинко

Сообщение Martian »

ОС и редактор уже много лет как могут использовать UTF-8/16, и это должно быть настроено прям сразу после установки. Все древние неюникодные кодировки - анахронизм или узкоспециализированное.
Аватара пользователя
главный колбасист
Это не хвост, это антенна
Сообщения: 1325
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край
Контактная информация:

Re: Котуинко

Сообщение главный колбасист »

BOB51 писал(а):Да и использовать для тестов - тренировок нужно латиницу - ее все программы понимают без некорректностей.
Martian писал(а):С и редактор уже много лет как могут использовать UTF-8/16, и это должно быть настроено прям сразу после установки. Все древние неюникодные кодировки - анахронизм или узкоспециализированное.
Только не у меня. У меня всё древнее,WinXP и пр. , и мой DevC кириллицу пишет кракозябрами,
в том числе и в комментариях. :cry:

з.ы.
После выполнения вышенаписанного вот чего.
Вложения
2024-08-20_193125.jpg
(26.38 КБ) 5506 скачиваний
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15554
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

:facepalm:
имя файла на кириллице!!!
этого больше всего DOS с простейшими (и "устаревшими") программами не переваривает...
:(
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15554
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Приехали таки индикаторы в коробушках...
Симпатяшки,
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.
:hunger:
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15554
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

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

Re: Котуинко

Сообщение ARV »

Истина есть питание от 3,3 с повышающим до 5 стабом

Добавлено after 1 minute 29 seconds:
Кстати, такой вариант и от 5 можно питать, т.к. повышающий до 5 стаб при питании от 5 превращается в проводник.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15554
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Оно то верно, да вот существование 10 позиционных семисегментников с питанием от 6 до 2,7/3 вольт даёт мыслю, что авто контраст возможен...
:roll:
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15554
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Попались вот такие резисторы (накопались после очередной ревизии старого ....)...
https://img.radiokot.ru/files/20529/3jpdnrzv5u.jpg
куда б применить...?
:roll:
:sleep:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Котуинко

Сообщение ARV »

Если на закате их бросить с горы, они красиво будут порхать в лучах солнца...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15554
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Да кто ж их знает.. Может где и пригодятся - это ж "тензорезисторы"...
:dont_know:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Котуинко

Сообщение ARV »

Поверьте, лучше полета в лучах заката им применения не найти!

Все вещи, детали, предметы и т.п., которым не нашлось применения за предыдущие годы, надо выкинуть, и не ломать голову. Я недавно выкинул примерно с килограмм советских транзисторов... Еще раньше мешок 155й серии. Еще раньше полноразмерный картофельный мешок резисторов МЛТ... Сейчас готовлюсь выкинуть около сотни транзисторов "в металле"... Всем этим запасам лучшее место на свалке.

Добавлено after 2 minutes 40 seconds:
Вот единственное, о чем жалею, так это об отданных "во дворец пионеров" куче ГРИ... В ту пору АЛ307 казался невероятно крутым, а теперь... Эх...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: Котуинко

Сообщение Sergi »

У меня из МП42 получаются неплохие кнопки.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15554
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

"...
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 ???
и доки на китайском...
:roll:
Аватара пользователя
zAries
Потрогал лапой паяльник
Сообщения: 306
Зарегистрирован: Ср сен 11, 2024 10:18:53

Re: Котуинко

Сообщение zAries »

[uquote="BOB51",url="/forum/viewtopic.php?p=4625954#p4625954"]"...32-разрядный 8051 Cortex MCU серии 32G[/uquote]
Написали на сайте Cortex а надо было Core Ошибочка по Фрейду :)
Audiatur et altera pars !
Ответить

Вернуться в «Разные вопросы по МК»