Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
 Аватар для AVL
2 / 2 / 0
Регистрация: 14.08.2012
Сообщений: 100

Таинственный (для меня) printf. Почему печатает "не то"

02.04.2013, 20:50. Показов 3756. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Есть отлично работающая программа, но я её хочу подправить, соответственно мне надо разобраться в некоторых моментах её работы. Что б разобраться я вывожу данные через КОМ-порт на терминал.
Вот участок кода который никак не укладывается у меня в голове, хотя он примитивен

C
1
2
3
4
5
6
7
8
9
10
11
void getString(long int run) 
{
 unsigned int res = 123000; 
 printf("res = %d\n", res);
 printf("run = %d\n", run);
 res = run; 
 printf("res = run = %d\n", res);
 res = 65535 - res; 
 printf("65535 - res = %d\n", res); 
 decToChar(res);
}
В терминале я получаю следующее:
res = -7616
run = -8072
res = run/32 = -8072
65535 - res = 8071

Хотя ожидал увидеть 123000 и так далее...
Что я делаю не так в printf ?
Спасибо!

ХЕЛП прилагается:

The following conversion type characters are supported:
'i' - the function argument is a signed decimal integer;
'd' - the function argument is a signed decimal integer;
'u' - the function argument is an unsigned decimal integer;
'e' - the function argument is a float, that will be outputted using the [-]d.dddddd e[±]dd format
'E' - the function argument is a float, that will be outputted using the [-]d.dddddd E[±]dd format
'f' - the function argument is a float, that will be outputted using the [-]ddd.dddddd format
'x' - the function argument is an unsigned hexadecimal integer, that will be outputted with lowercase characters;
'X' - the function argument is an unsigned hexadecimal integer, that will be outputted with with uppercase characters;
'c' - the function argument is a single character;
's' - the function argument is a pointer to a null terminated char string located in RAM;
'p' - the function argument is a pointer to a null terminated char string located in FLASH;
'%' - the '%' character will be outputted.

Добавлено через 12 минут
И вдогонку.
Если я использую: 'u' - the function argument is an unsigned decimal integer;

C
1
2
3
4
5
6
7
8
 unsigned int res = 123456; 
 printf("res = %u\n", res);
 printf("run = %u\n", run);
 res = run; 
 printf("res = run/32 = %u\n", res);
 res = 65535 - res; 
 printf("65535 - res = %u\n", res); 
 decToChar(res);
То в терминале получаю:

res = 57920
run = 57464
res = run/32 = 57464
65535 - res = 8071


Почему ТАК?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.04.2013, 20:50
Ответы с готовыми решениями:

Need for Speed Most Wanted 2. Для меня - классная. А для других - провал. Почему?
Need for Speed Most Wanted 2. Для меня - классная. А для других - провал. Почему? Я считаю эту серию самым революционным и успешным игрой...

Почему у меня не открывается окно для кода?
Здраствуйте. Недавно установил Visual C++ 2010 Express, после чего зарегистрировал, потом открываю проект, появляется левая колонка с...

SSL почему то работает только для меня
В общем тема такая: Попытался установить SSL. SSL сертификат купил естественно. Вроде как то с горем пополам получилось...

23
 Аватар для AVL
2 / 2 / 0
Регистрация: 14.08.2012
Сообщений: 100
03.04.2013, 18:43  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ZeR_0 Посмотреть сообщение
а если вместо %ld просто %d не смотря на long. У меня так выводит Long'и
То "урезает" вывод.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
03.04.2013, 19:01
Цитата Сообщение от ZeR_0 Посмотреть сообщение
а если вместо %ld просто %d не смотря на long. У меня так выводит Long'и
У вас скорее всего sizeof(int) = 4. Проверьте.
0
 Аватар для AVL
2 / 2 / 0
Регистрация: 14.08.2012
Сообщений: 100
05.04.2013, 20:15  [ТС]
Цитата Сообщение от Байт Посмотреть сообщение
AVL, В представленном тобой коде написано
printf("res = %u\n", 123456);
Это и дает 57920.
Странно, что
C
1
2
long res = 123456L;
printf("%ld\n", res);
дает какую-то ахинею.
Вот тут-то у меня и были подозрения, что ты пропустил какую-то закорючку, вставил лишний пробел и т.п.
А то, что ты выложил, работает именно так должно, т.е. дает 57920 и ничего странного в этом нет.
Да, обрати внимание, что за 123456 вплотную стоит буква L.
Спасибо!
Ваш код работает, боле того, он для меня удобней, ибо проще в понимании.
Но, "L" я убрал, ибо оно мне мешает вместо 123456 переменную ставить, а код продолжает правильно работать.
Спасибо, Вы МОЛОДЕЦ!
Ставлю "+".
1
05.04.2013, 22:27

Не по теме:

Цитата Сообщение от AVL Посмотреть сообщение
Спасибо, Вы МОЛОДЕЦ!
Спасибо, вы меня так тронули! Вот жене показал, она меня зауважала.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.04.2013, 22:27

Почему у меня для использования функций cstring не нужно включать прототип библиотеки
Я недавно начал осваивать с++ с помощью учебника и там по ходу главы создается тренировочный класс String для работы со строками и в нем...

Флаг failbit для перенаправления строкового потока; почему он всегда у меня поднят?
#include <windows.h> #include <stdio.h> #include <sstream> using namespace std; int main() { SetConsoleCP(1251); ...

что печатает printf("%.17g\n", s);
printf("%.17g\n", s); что печатает?

почему PRINTF не работает?
есть файл с следующим содержаним: aa fr ab ty ac qw .. az re нужно найти в этом файле комбинацию ab и во второй файл записать 2...

Почему не работает printf?
int main(){ setlocale(LC_ALL,"RUS"); SetConsoleCP(1251); SetConsoleOutputCP(1251); char sym; int n=0; printf("введите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru