• Уменьшение отступа

    Обратная связь

    (info@ru-sfera.pw)

Вопрос по Си


Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
Skype
Приветствую Всех прошу помощи в изучении СИ !
По началу начал изучать C++ ,но как понял без Си я не смогу понять !
Вот и начал изучать Си по этой книге

Код:
Прата
Язык программирования C. Лекции и упражнения, 6-е издание
Пока изучил 2 и 3 главу ,и часть 4-й
Вот написал кое какую программу на Си и как я ее понимаю ,эту программу ,если я где-то не так понял или не точно описал ,подскажите или по правьте мои ошибки ,если можно по точнее ,или помогите ,как по вашему будет выглядеть эта программа при разборе
Код:
#include <stdio.h>
#define DOLLAR 63.63

int main ()
{
    char name[40];
    char name1[40];
    char name2[40];
    char name3[40];
    int ruble, ruble1, ruble2;
    float dollar;
    printf("Меня зовут \n");
    scanf("%s", name3);
    printf("А вас как зовут ?\n");
    scanf("%s", name);
    printf("и тебя как зовут ?\n");
    scanf("%s", name1);
    printf("и тебя как зовут ?\n");
    scanf("%s", name2);
    printf("Сколько у тебя рублей %s ?\n", name);
    scanf("%d", &ruble);
    printf("А у тебя рублей %s ?\n", name1);
    scanf("%d", &ruble1);
    printf("А у тебя рублей %s ?\n", name2);
    scanf("%d", &ruble2);
    getchar ();
    dollar = (ruble + ruble1 + ruble2) / DOLLAR ;
    printf("Сколько в сумме будет долларов %.2f \n", dollar);

    return 0;
}
Попробую разобрать программу ,как я это понимаю
Код:
#include <stdio.h>
Здесь #include - деректива препроцессора ,которая включает заголовочные файлы ,
stdio.h - заголовочный файл означает ввод с клавиатуры и вывод на дисплей ( терминал )
Код:
#define DOLLAR 63.63
#define - препроцессор символьной константы
Код:
int main ()
Все программы на СИ и C++ должны начинаться с этой функции
Код:
char name[40];
char - целочисленный и символьный тип данных
name - переменная
[40] - сколько включается в стек символов
Код:
int ruble, ruble1, ruble2;
int целочисленный тип данных ,как положительный так и отрицательные цыфры
ruble, ruble1, ruble2; - переменные
Код:
printf("А вас как зовут ?\n");
printf - вывод на экран ( терминал )
"А вас как зовут ?\n" - текст без двойных кавычек ,который выводится на экран ( терминал )
\n - переводит курсор на новую строку
Код:
float dollar;
float - числа с плавающей точкой ( запятой )
dollar; - переменная
Код:
scanf("%s", name2);
scanf - принимает ввод с клавиатуры и вывод на экран ( терминал )
"%s" - спецификатор который считывает все не пробельные символы
Код:
dollar = (ruble + ruble1 + ruble2) / DOLLAR ;
dollar - переменная
Код:
return 0;
return - переменная возврата
Код:
{

}
тело функции
 
Последнее редактирование:

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
Вроде всё правильно...
getchar(); ненужен, видно забыли убрать в коде ! :)

В библиотеке <stdio.h> есть ещё оператор получения/помещения данных в поток, это cout !
  • >> получить из входного потока
  • << поместить в выходной поток
Пример:

cout << "Значение n равно" << n ;

Получение из потока:

cout >>n

А вообще можете свой printf и scanf написать сами, я как-то писал с нуля одну вещь, небыло там не printf не cout, пришлось самому писать, вернее взял от сюда исходники, гы-гы: Там файлик core/printf.c как-раз реализация ! :)
 

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
Skype
Последнее редактирование:

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
Skype
Вот еще вопрос почему ,на C++ наподобие написанная программа ,при положительных целочисленных данных ( тоесть ответа ,не будет отрицательного ответа программы ) в коде нельзя ставить
вместо этого
Код:
int main ()
это
Код:
unsigned int main ()
будет выдавать ошибку ,а в СИ можно ,ошибки не будет ?
 
Последнее редактирование:

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
Ну cout относиться к C++ ,а как его можно реализовать в Си ?
В си и с++ нет встроенных в язык средств ввода/вывода, поэтому если писать программу с нуля, нужно реализовать самим такой функционалл....

В Visual Studio например можно подключить либу stdio.h где уже реализован printf, да я ошибся, на самом деле есть еще более новая либа, это iostream, если ее подключить, то можно как-раз заюзать cout, правда нужно еще определить область видимости имен:

using namespace std;
 

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
Skype
iostream, если ее подключить, то можно как-раз заюзать cout, правда нужно еще определить область видимости имен:

using namespace std;
Ну это я знаю cout служит для вывода текста на экран или консоль ,а вот cin для ввода с клавиатуры
Код:
cin >> name;
кстате можно не подключать определения область видимости имен ,то тогда код программы будет такой ,если я еще не забыл ))
Код:
#include <iostream>
 int main()
{
std:cout >> "Привет Всем !";
return 0;
}
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
Вот еще вопрос почему ,на C++ наподобие написанная программа ,при положительных целочисленных данных ( тоесть ответа ,не будет отрицательного ответа программы ) в коде нельзя ставить
вместо
Код:
int main ()
Код:
unsigned int main ()
будет выдавать ошибку ,а в СИ можно ,ошибки не будет ?
Речь идет про компилятор студии ?

На самом деле разные компиляторы, могут реагировать по разному, но подозреваю что в вашем случае нужно смотреть прототип функции main, это можно глянуть в документации, но скорей-всего там такой прототип:

int main(int argc, char *argv[]);

Если вы будете пытаться переопределить в uint, то вернет ошибку, как несоответсвие типу, какие-то компиляторы пропускают это...
 

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
Skype

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176

Re2sgsII

Пользователь
Форумчанин
Регистрация
06.10.2015
Сообщения
45
Репутация
3
Skype
А в си разве есть uint ?

Попробуйте тогда long int !
unsigned int в Си есть
Так unsigned - целочисленный тип данных без знака минус ,а long тот же тип данных что и int ,но с большим диапазоном чисел со знаком и без знака минус ,
такое ощущение складывается что при применении unsigned для функции int main () в C++ не приемлемо ,а вот в Си это нормально ,только не понятно почему ( даже если в программе будет положительный ответ без знака минус ) ?
Я конечно только начал изучать Си и мне пока не понятно почему ,может потом будет понятно почему нельзя использовать unsigned для функции int main () в C++ !
 
Последнее редактирование:
Верх Низ