ស្វែងរក

6. Character Input and Output

Model នៃ input និង output ត្រូវបានគាំទ្រដោយ  standard library។ អក្សរដែលយើង input និង output គឺមានជាប់ជាមួយនូវ streams​ នៃអក្ខរទាំងអស់នោះ។ Text Stream គឺអក្សរទាំងឡាយដែលចែកចេញជាបន្ទាត់ ហើយគ្រប់បន្ទាត់ទាំងអស់មិនថា មាន ឬមិនមានអក្សរ  (zero space or more characters) គឺមានភ្ជាប់ដោយ អក្សរនៃបន្ទាត់ថ្មីមួយ (a newline character)។ រាល់ការ input និង output គឺជាតួនាទីរបស់ library។ Standard library ផ្ដល់នូវ functions សម្រាប់ read និង write មួយតួអក្សរម្ដងដោយ getchar និង putchar។ getchar ប្រើសម្រាប់ចាប់យកអក្សរដែលបានវាយបញ្ចូលពី text stream ហើយបោះតម្លៃនោះមកវិញដោយ putchar។ យើងអាចសរសេរបានថា៖
c​​ = getchar ()។ variable c ផ្ទុករាល់អក្សរដែលបានបញ្ចូលតាមរយៈក្ដាចុច (keyboard)
putchar (c)។ បង្ហាញ (print) ម្ដងមួយតួអក្សរតាមលំដាប់លំដោយ។

6.1 File Copying
ខាងក្រោមនេះជាឧទាហរណ៍ ក្នុងការប្រើប្រាស់ getchar() និង putchar()។ យើងប្រើ getchar() ដើម្បីចាប់អក្សរពីក្ដារចុច បន្ទាប់មកយើងប្រើប្រាស់ while loop ដើម្បីបង្ហាញម្ដងមួយតួអក្សរទាំងនោះមកវិញតាមរយៈ putchar()។

Console:

#include <stdio.h>
int main()
{
 int test;/*define variable test as an integer*/
 test = getchar();/*assign all character from keyboard input to test*/
 while (test != EOF)/*loop count all characters in test when it is not end of file*/
 {
  putchar(test);/*read a character from test*/
  test = getchar();/*print a character on the screen*/
 }
 return 0;
}

or

#include <stdio.h>
int main()
{
 int test;/*define variable test as an integer*/
 while (test = getchar()!= EOF)/*loop count all characters in test when it is not end of file*/
 {
  putchar(test);/*read and print a character from test*/
  
 }
 return 0;
}

or
#include <stdio.h>

int main(void)
{
    double nc;
    for (nc=0; getchar()!=EOF;++nc)
    {
      printf("%.0f\n",nc);  
    }
    return 0;
}
Output:

I am using getchar() and putchar()
I am using getchar() and putchar()

សេចក្ដីពន្យល់៖
- != "not equal to" មិនស្មើ ហៅថា Relation operation។
- EOF "end of file" មានន័យថា មិនមែនចុងបញ្ចប់នៃ File ឬក្នុងឧទាហរណ៍ "I am using getchar() and putchar()" ដូច្នេះ EOF គឺខាងចុងនៃ "putchar()" បន្ទាប់ពី ")'

6.2 Character Counting
ខាងក្រោមនេះជាឧទាហរណ៍
Console:
#include <stdio.h>
int main(void)
{
 long nc;
 nc = 0;
 while (getchar()!=EOF)
 {
  ++nc;/*increase nc by 1*/
  printf("%1d\n",nc);
 }
 return 0;
}

Output:
hello
1
2
3
4
5
6

សេចក្ដីពន្យល់៖
- ++nc ប្រើសម្រាប់បូកបន្ថែមចំនួនដោយ1 រហូតដល់ចំណុចបញ្ចប់ណាមួយ។ ++ ឬ -- អាចប្រើប្រាស់ខាងមុខ ឬខាងក្រោយក៏បាន ប៉ុន្តែមានការប្រើប្រាស់ខុសគ្នា។ ++nc ខុសពី nc++ ឬ --nc ខុសពី nc--។

5. Symbolic Constants

Symbolic Constants ត្រូវបានប្រើប្រាស់ក្នុងការបង្កើតឈ្មោះតំណាង (Defined) ក្នុងកម្មវិធីមួយ។ Symbolic Constants គឺត្រូវបានប្រើប្រាស់ដូចទៅហ្នឹង Variable ក្នុងការផ្ទុកតម្លៃថេរណាមួយ។ យើងមានពីររបៀបក្នុងការប្រកាស ឬបង្កើត Symbolic Constants គឺ៖
- ប្រើ #define directive ជាទូទៅត្រូវបានគេប្រកាសជា Global Variable ហើយផ្នែកចុងពុំមាន ; (semicolon)។
- និង const keyword គេអាចប្រកាសជា Global Variable ក៏បាន ឬគ្រប់ Block នៃកម្មវិធីដូចទៅហ្នឹង variable ទូទៅ
ឧទាហរណ៍ តម្លៃ PI=3.1416
- #define PI 3.1416​ /*define PI as a symbolic constants*/
- const float PI=3.1416 /*define PI as a constant*/

ឧទាហរណ៍១៖ 
ការគណនារកក្រឡាផ្ទៃនៃរង្វង់ តាមរយៈការប្រើប្រាស់រូបមន្ត  Area = π × r2
Console:
#include <stdio.h>
#include<math.h>/*include standard library of math.h*/
#define PI 3.1416 /*define PI as a Symbolic Constants*/
const float PI2=3.1416;/*define PI as a global Constants*/
float radius, area;/*area= π × r2 as global variables*/
int main(void)
{
    const float PI3=3.1416;
    
 printf("Radius1:");
 scanf("%f", &radius);
 area = PI * pow(radius, 2);
 printf("Area is %.2f\n", area);
 
 printf("Radius2:");
 scanf("%f",&radius);
 area=PI2*pow(radius,2);/*Using PI2 Constants*/
 printf("Area2 is %.2f\n",area);
 
 printf("Radius3:");
 scanf("%f",&radius);
 area=PI3*pow(radius,2);
 printf("Area3 is %f\n",area);
 
 return 0;
}

Output:

Radius1:3
Area is 28.27
Radius2:4
Area2 is 50.27
Radius3:5
Area3 is 78.540001

4. Memory Concepts

ឧទាហរណ៍១៖
ការបូកលេខនៃពីរចំនួន។
Console:
#include<stdio.h>
int main(void)
{
 int integer1, integer2,sum;

 printf_s("Integer1:");
 scanf_s("%d", &integer1);
 printf_s("Integer2:");
 scanf_s("%d", &integer2);
 sum = integer1 + integer2;
 printf_s("Integer1+integer2=%d",sum);

 return 0;
}
Output:
Integer1:3
Integer2:5
Integer1+integer2=8 

សេចក្ដីពន្យល់៖
Variable ដូចជា integer1, integer2, sum គឺតាមពិតពួកវាផ្ទុកនៅក្នុង Memory។ ហើយ variable ទាំងអស់នោះមាន ឈ្មោះ និងតម្លៃ (variable name and value)។
scanf_s("%d", &integer1); នៅពេលវាយបញ្ចូលតម្លៃណាមួយ ហើយតម្លៃនោះស្ថិតក្នុងទីតាំង Memory ឈ្មោះ integer1 គឺស្គាល់ដោយ &។

3. Variables និង Arithmetic Expression

កម្មវិធីបន្ទាប់ប្រើប្រាស់រូបមន្ត Celsius=5*Fahrenheit-32/9 ដើម្បីធ្វើការបង្ហាញតារាងបំលែង Celsius ទៅ Fahrenheit ដោយ Loop ម្ដង 20 degree និងធំបំផុតត្រឹម 300 degree។

Console:

#include <stdio.h>/*Include standard library*/
/*Fahrenheit-Celsius Table*/
int main(void)/*Define function main*/
{/*start function main*/
 int celsius, fahr;/*variable celsius and fahr as integer (identifier)*/
 int lower=0, upper=300, step=20;/*variable lower, upper, step as integer*/
 printf("Fahrenheit\tCelsius\n");/*print header of table*/
 fahr = lower;/*first value of fahr is 0*/
 while (fahr<=upper)/*do loop until fahr=upper*/
 {/*start while loop*/
  celsius = 5*(fahr - 32) / 9;/*value of celsius*/
  printf("%d\t\t%d\n",fahr,celsius);/*print %d (decimal) by order fahr, celsius*/
  fahr = fahr + step;/*increase fahr by step(20)*/
 }/*end while loop*/
 return 0;/*exited function main*/
}

Output:
Fahrenheit      Celsius
0               -17
20              -6
40              4
60              15
80              26
100             37
120             48
140             60
160             71
180             82
200             93
220             104
240             115
260             126
280             137
300             148
Console:
#include <stdio.h>/*Include standard library*/
/*Fahrenheit-Celsius Table*/
int main(void)/*Define function main*/
{/*start function main*/
 float celsius, fahr;/*variable celsius and fahr as float (identifier)*/
 int lower = 0, upper = 300, step = 20;/*variable lower, upper, step as integer*/
 printf("Fahrenheit\tCelsius\n");/*print header of table*/
 fahr = lower;/*first value of fahr is 0*/
 while (fahr <= upper)/*do loop until fahr=upper*/
 {/*start while loop*/
  celsius = 5 * (fahr - 32) / 9;/*value of celsius*/
  printf("%.0f\t\t%.2f\n", fahr, celsius);/*print %f (float) by order fahr, celsius .0 or .2 or 0.2 show number after (.) */
  fahr = fahr + step;/*increase fahr by step(20)*/
 }/*end while loop*/
 return 0;/*exited function main*/
}
Output:
Fahrenheit      Celsius
0               -17.78
20              -6.67
40              4.44
60              15.56
80              26.67
100             37.78
120             48.89
140             60.00
160             71.11
180             82.22
200             93.33
220             104.44
240             115.56
260             126.67
280             137.78
300             148.89
យើងមានមួយរបៀបទៀត៖

#include <stdio.h>
int main(void)
{
 int fahr;
 printf("Fahrenheit\tCelsius\n");
 for (fahr = 0; fahr <= 300; fahr=fahr + 20)
 {
  printf("%3d\t\t%6.1f\n",fahr,(5.0/9.0)*(fahr-32));
 }
 return 0;
}

សេចក្ដីពន្យល់

int ហៅថា identifier មានប្រភេទទិន្នន័យជា Integer។
celsius, fahr, lower, upper, step ហៅថា Variable។ បានសេចក្ដីថាអ្វីដែលនៅក្រោយ identifier គឺជា variable។
lower=0, upper=300, step=20 ហៅថា initial value ឬតម្លៃដំបូង។
while(){} គឺប្រភេទ while loop មានតួនាទីធ្វើការម្ដងហើយម្ដងទៀត ដោយមានចំណុចចាប់ផ្ដើម និងបញ្ចប់ណាមួយ។
%d គឺសំដៅទៅលើការទទួលយកតម្លៃជាប្រភេទចំនួនគត់ integer។
+, -, *, /,% (remainder)... ហៅថា arithmetic expression។

ឧទាហរណ៍២៖ 
ការគណនារកផ្ទៃក្រឡា។

Console:
#include<stdio.h>/*include standard library*/
int main(void)/*define function main()*/
{/*start function main()*/
 float base, height, length, topbase, bottombase, area;/*variables declare as float number*/
 int shape;/*user's choice*/
 printf("Welcome! Area calculation!\n"); 
 printf("1. Square\n");
 printf("2. Rectangle\n");
 printf("3. Triangle\n");
 printf("4. Trapezium\n");
 printf("5. Paralllelogram\n");
 printf("6. Rhombus\n");
 printf("7. Kite\n");
 printf("Please, chose one of these (put number only):\n");
 scanf_s("%d",&shape);/*& get the address of variable shape in memory where it located*/
 
 if (shape == 1||shape==2||shape==5)/*If user input 1, 2, 5 are the same formula. || mean "or"*/
 {  
  printf("Base=");
  scanf_s("%f",&base);
  printf("Height=");
  scanf_s("%f",&height);
  area= (base * height);
  printf("Area=%f", area);
 }
 else if (shape==3)
 {
  printf("Base=");
  scanf_s("%f",&base);
  printf("Height=");
  scanf_s("%f", &height);
  area = (base * height) / 2;
  printf("Area=%f", area);
 }
 else if (shape==4)
 {
  printf("Top Base=");
  scanf_s("%f", &topbase);
  printf("Bottom Base=");
  scanf_s("%f",&bottombase);
  printf("Height=");
  scanf_s("%f",&height);
  area = ((topbase + bottombase) * height) / 2;
  printf("Area=%f", area);
 }
 else if (shape==6||shape==7)
 {
  printf("Lenght=");
  scanf_s("%f",&length);
  printf("Height=");
  scanf_s("%f", &height);
  area = (length * height) / 2;
  printf("Area=%f",area);
 }
 else
 {
  printf("Sorry! Try again!\n");/*if user input non of choice*/
 }
 return 0;
}

Output:
Welcome! Area calculation!
1. Square
2. Rectangle
3. Triangle
4. Trapezium
5. Paralllelogram
6. Rhombus
7. Kite
Please, chose one of these (put number only):
1
Base=4
Height=6
Area=24.000000

ឧទាហរណ៍៣៖ 
ការគណនាលុយខ្មែរទៅជាលុយដុល្លារសហរដ្ឋអាមេរិក និងពីដុល្លារសហរដ្ឋអាមេរិកទៅជាលុយខ្មែរវិញ។
Console:
#include <stdio.h>
int main(void)
{
 int khmer_currency, us_currency, rate,choice;
 printf("Currency Conversion\n");
 printf("--------------------\n");
 printf("1. Khmer Riel-->US Dollar\n2. US Dollar-->Khmer Riel\n");
 printf("--------------------\n");
 printf("Current Rate 1$=");
 scanf_s("%d", &rate);
 printf("Please, chose one of these:");
 scanf_s("%d",&choice);
 if (choice==1) 
 {
  printf("Khmer Riel Amount=");
  scanf_s("%d",&khmer_currency);
  us_currency = khmer_currency / rate;
  printf("US Dollar Amount=$%d",us_currency);
 }
 else if (choice==2)
 {
  printf("US Dollar Amount:");
  scanf_s("%d",&us_currency);
  khmer_currency = us_currency * rate;
  printf("Khmer Riel Amount=%dR",khmer_currency);
 }
 else
 {
  printf("Sorry! Out of choice!\n");
 }
 return 0;
}

Output:
Currency Conversion
--------------------
1. Khmer Riel-->US Dollar
2. US Dollar-->Khmer Riel
--------------------
Current Rate 1$=4000
Please, chose one of these:2
US Dollar Amount:100
Khmer Riel Amount=400000R


ឧទាហរណ៍៣៖ 
Global Variable និង Static Variable

Console:
#include <stdio.h>
int globalvar;/*Global Variable*/
int main(void)
{
 static int staticva;/*Static variable*/
 int sum;
 printf("Input Global Variable:");
 scanf_s("%d",&globalvar);
 printf("Input Static Variable:");
 scanf_s("%d",&staticva);
 sum = globalvar + staticva;
 printf("Sum is %d",sum);
}

Output:
Input Global Variable:34
Input Static Variable:21
Sum is 55 

2. តោះចាប់ផ្ដើម

វិធីតែមួយគត់ក្នុងការរៀនភាសាសរសេរកូដថ្មីមួយ គឺត្រូវរៀនសរសេរបង្កើតកម្មវិធីដោយភាសានោះ។ ដើម្បីសរសេរកូដភាសា​ C បាន យើងអាចប្រើប្រាស់កម្មវិធីមួយចំនួនដូចជា៖
1. Microsoft Visual Studio (IDE)
2. Eclipse
3. Code::blocks ...
ឬ យើងអាចប្រើប្រាស់ Tools ផ្សេងៗលើ Online ដូចជា៖https://www.onlinegdb.com/online_c_compiler

កម្មវិធីដំបូងក្នុងការសរសេរគឺដូចភាសាផ្សេងៗទៀតនោះគឺ សរសេរបង្ហាញពាក្យថា៖ "Hello, World!"។

ឧទារហរណ៍១៖
Console:

#include <stdio.h>/*include about standard library​ input/output*/
int main(void)/*define function main with argument (void)*/
{
 printf("Hello, World!\n");/*{statement}printf is library function with ("") string argument. \n is an escape sequence */
 printf("Hello, ");
 printf("World!");
 printf("\n");
 printf("Hello,\tworld!\n");/*\t is tab.*/
 printf("Hello,\bworld!\n");/*\b backspace*/
 printf("Hello,\"world!\n");/*\" is double quote*/
 printf("Hello,\\world!\n");/*\\ is backslash*/
 return 0;/*code executed and ended successfully or exited function*/
}
Output:
Hello, World!
Hello, World!
Hello,  world!
Helloworld!
Hello,"world!
Hello,\world! 

សេចក្ដីពន្យល់៖

#include <stdio.h> ហៅថា Preprocessor ប្រាប់ compiler (អ្នកធ្វើឲ្យកូដដែលយើងបានសរសេរដំណើរការ) យកព័ត៌មានក្នុង Standard library input/output យកមកប្រើប្រាស់។ មានន័យថា function printf() គឺស្ថិតក្នុង library នៃ <stdio.h>។
int main (void) ហៅថា function ដែលយើងបង្កើតដោយខ្លួនឯង ដែលអាចទទួល​ឬមិនទទួលតម្លៃអ្វីមួយ។ យើងអាចបង្កើត function ដែលមិនទទួលតម្លៃមកវិញគឺ int main()។ យើងនឹងសិក្សាបន្ថែមនៅក្នុមេរៀនខាងមុខ។
(...) រាល់អ្វីដែលស្ថិតក្នុងសញ្ញានេះ(brackets)គឺហៅថា argument។ ឧទាហរណ៍៖ printf("Hello, World!"); មាន argument គឺ "Hello, World!"។
{...} រាល់អ្វីដែលស្ថិតក្នុងសញ្ញានេះ(curly brackets)គឺហៅថា statement។ តាមឧទាហរណ៍ខាងលើយើងមាន 8 statements។
/*...*/ រាល់អ្វីដែលនៅក្នុងសញ្ញានេះហៅថា comment គឺប្រើសម្រាប់ធ្វើការកត់ចំណាំអ្វីមួយ ដោយប្រាប់ compiler រំលងចោល។
"..." រាល់អ្វីដែលនៅក្នុងសញ្ញានេះ(double quotes)ហៅថា string។
; ហៅថា semicolon។
\ ហៅថា slash។...

ឧទាហរណ៍២៖
Console:
#include <stdio.h>
int main()
{
 printf("Hello everyone.\nThis is my first program.");
}
Output:
Hello everyone.
This is my first program.

1. តើភាសា C ជាអ្វី

ភាសា C គឺជាភាសាសរសេរកូដកុំព្យូទ័រ បង្កើតដោយលោក Dennis Ritchie ចន្លោះឆ្នាំ 1972-1973។ គំនិតសំខាន់ៗនៃភាសា C គឺបង្កើតចេញពីភាសា BCPL ដែលបង្កើតដោយលោក Martic Richards ក្នុងឆ្នាំ 1967 និងភាសា B បង្កើតឡើងដោយលោក Ken Thompson ក្នុងឆ្នាំ 1970។ ទាំង BCPL និង B គឺ Typeless language ដោយផ្ដោតលើ ពាក្យ(word) ក្នុងការសរសេរកូដ។ បន្ទាប់មកទៀតទើបមានការបង្កើតភាសា C ឡើងដោយមានបន្ថែមប្រភេទទិន្នន័យ (datatype) និងផ្នែកផ្សេងៗដ៏មានប្រសិទ្ធភាពល្អជាង។ ភាសា C ត្រូវបានបង្កើតជាស្តង់ដារនៅឆ្នាំ 1989 ជា ANSI X3.159-1989 នៅសហរដ្ឋអាមេរិក ដោយអង្គការមួយឈ្មោះថា American National Standards Institute (ANSI) ក្រោយមកទៀតត្រូវបានស្គាល់ជា International Standards Organization (ISO) កំឡុងឆ្នាំ 1999 ឲ្យឈ្មោះថា C99 (ISO/IEC 9899:1999) ។ ភាសា C ត្រូវបានប្រើប្រាស់ជាមូលដ្ឋានក្នុងការបង្កើត Kernel នៃប្រព័ន្ធប្រតិបត្តិការ Unix operating system ។ល។