fixfix
2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Как этот код работает ?
Сообщение19.10.2021, 00:10 


06/04/18

323
Используется синтаксис C++
#include <cstdio>
#include <ctype.h>

int main() {
    int c;
    while ( ( c = getchar() ) != EOF )
        putchar( tolower( c ) );
    return 0;
}

В процессе выполнения вводим 1aBc#, получаем 1abc#, и так далее.
Каким образом в переменной $c$ типа int складируется целая строка ?

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение19.10.2021, 00:15 
Заслуженный участник


18/09/21
1771
В переменной c только один символ за раз. Целая строка проходится в цикле, по одному символу за итерацию.

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение19.10.2021, 00:27 


06/04/18

323
zykov в сообщении #1535402 писал(а):
Целая строка проходится в цикле
Каким образом она присваивается и хранится ? Тем более странно, что она хранится в переменной типа int. Разве тип int предназначен для хранения строк или чего-то подобного ?

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение19.10.2021, 00:34 
Заслуженный участник
Аватара пользователя


16/07/14
9446
Цюрих
Строка не хранится в int. В переменную c читаем по одному символу, приводим его к нижнему регистру и тут же печатаем.

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение19.10.2021, 00:52 


06/04/18

323
А что хранится в int с ?

-- 18.10.2021, 21:52 --

Это же целочисленный тип.

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение19.10.2021, 01:13 
Заслуженный участник


09/05/12
25179
Qlin в сообщении #1535406 писал(а):
Это же целочисленный тип.
Qlin, вы, судя по предыдущим темам, учили C++ (и вроде даже небезуспешно) в первой половине 2019 года. У вас случилась амнезия или приступ троллинга?

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение19.10.2021, 02:09 
Заслуженный участник


18/09/21
1771
Смотрим документацию по getchar.
Она читает ровно ОДИН символ из стандартного входного потока.
Код этого символа записывается в переменную c.
Если это специальный код EOF, то происходит выход из цикла.
Если нет, то функция tolower возвращает код для буквы нижнего регистра, если был верхний регистр (или возращает без изменения, если это не была буква верхнего регистра).
Функция putchar посылает этот символ в стандартный выходной поток.
Потом следующая итерация цикла и т.д.

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение19.10.2021, 02:21 


06/04/18

323
Видимо присваивание c = getchar() преобразует полученный с клавиатуры char в int, затем tolower( c ) обратно преобразует int в char. При этом есть странность в поведении функции getchar(), которая, получив строку, выстраивает из неё очередь, и при каждом вызове посимвольно возвращает значения из очереди, не запрашивая ввода с клавиатуры. У меня этому нет другого объяснения
Используется синтаксис C++
#include <iostream>
using namespace std;

int main() {
    char cha = getchar();
    char chb = getchar();
    cout << cha << '\n';
    cout << chb;
}

При запуске программы один раз вводим AB, получаем:
A
B

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение19.10.2021, 02:37 
Заслуженный участник
Аватара пользователя


22/06/12
2129
/dev/zero
Qlin, вы серьёзно?

(man getchar)


 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение19.10.2021, 03:24 
Заслуженный участник


18/09/21
1771
Qlin в сообщении #1535412 писал(а):
затем tolower( c ) обратно преобразует int в char
Читаем документацию tolower. Как аргумент, так и результат имеют тип int.

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение23.10.2021, 12:21 
Заслуженный участник


12/08/10
1713
Qlin в сообщении #1535412 писал(а):
При этом есть странность в поведении функции getchar(), которая, получив строку, выстраивает из неё очередь, и при каждом вызове посимвольно возвращает значения из очереди, не запрашивая ввода с клавиатуры.
Именно так.

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение29.10.2021, 00:53 
Аватара пользователя


28/10/21
102
Qlin в сообщении #1535406 писал(а):
А что хранится в int с ?

Это же целочисленный тип.


Не совсем понимаю сути этого замечания в данном контексте. 'signed char' и 'unsigned char' - это тоже целочисленные типы.

У вас это не вызывает вопросов?

 Профиль  
                  
 
 Re: Как этот код работает ?
Сообщение29.10.2021, 00:57 


10/03/16
4444
Aeroport
TheRuinedMap в сообщении #1536809 писал(а):
У вас это не вызывает вопросов?


Вызывает )) Зачем было называть это "символом"? Как указание на диапазон -127 : 127 (signed) и 0:255 (unsigned)? Назвали бы тогда каким-нибудь "однобайтным целым"...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group