澳门正规赌博十大网站-澳门游戏网站
做最好的网站

C语言详解,C语言学习笔记

5.1scanf函数:作用是从键盘获取数据,格式化后再赋值给变量。

//例
<pre>
/#include<stdio.h>
void main()
{
int a, b;
scanf("%d, *%d, %d", &a, &b);
printf("This is a number: %d, %d n", a, b);
}
//输入:1, 2, 3
//输出:This is a number: 1, 3
</pre>

例5. getc()函数和putc()函数

6.2getchar()函数:作用是从终端输入一个字符。getchar函数将空格符、制表符、和换行符都作为有效字符录入。

printf()函数的格式字符串:
1)类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:

输出效果:

  scanf("%d",&m); 

  • scanf()函数:称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量中。(注:不能显示非格式字符串,格式字符串(如%c, %d等)是为了承接字符)
    C语言详解,C语言学习笔记。一般形式:scanf(“格式控制字符串”, 地址列表) (注:随不强制要求加头文件”stdio.h”, 但是因为书写习惯保持要加上)

3、宽度输入的情况:

  printf("n"); 

<pre>
/#include<stdio.h>
void main()
{
char a;
scanf("%c", &a); //(在gcc中,如果%c前面加上非格式字符串,那么即使输入任何合法字符,在printf时都无法显示,而且不会报错。)
//(在这里,&a 表示变量a的内存地址)
printf("This is a char: %c n", a);
}
C语言详解,C语言学习笔记。</pre>
(变量值和变量的地址的关系是:变量的地址(&a)是变量a对应的内存空间的地址,而在内存空间中存储的是变量的值,因此,要找变量的值必须先找变量地址,然后根据变量地址得到变量的值。 在赋值表达式中,不能直接写&a = 123,而应写a = 123。 这里的”&”指的是取地址运算符。)

getchar(): 将用户输入的字符输出到标准输出设备(屏幕)。按【Enter】键后,getchar()函数才会读入第一个字符,并返回该字符常量。

 

图片 1

当我们从键盘输入数据时,数据之间必须用分隔符分开(空格、Tab键、回车)。并且要求scanf函数中格式说明符的个数与数据列表中数据的个数相等。如:
scanf("%d%d", &a, &b);
scanf("%d%d%d", &a, &b, &c);
如果出现不相等的情况,我们应该怎么分析呢?

输出结果如下:

4)长度:长度格式符为l和h,l表示输入长整形数据(如%ld)和双精度浮点数(如%lf); h表示输入短整型数据。

宽度输入指的是在%和格式说明符d之间加入一个整数。如:scanf("-", &x);

1.5空语句:空语句一般指只有一个分号占位,一般用在程序设计初期,表示待编写的函数或代码。

2)“*” 符:表示该输入项读入后不赋予相应的变量,即跳过该输入值。

/* size_t的定义 */
#ifndef _SIZE_T_DEFINED
typedef unsigned int size_t;
#define _SIZE_T_DEFINED
#endif

 

image.png

    printf("The string you entered: ");    
    puts(s);    
}

 

<pre>
/#include<stdio.h>
/void main()
{
int i = 8;
printf("%d, %d, %d, %d, %d, %dn", i, --i, i , i--, -i , -i--);
}
//输出:8, 8, 7, 8, -7, -8
</pre>

<pre>
/#include<stdio.h>
void main()
{
int i = 8;
printf("%d, ", i);
printf("%d, ", --i);
printf("%d, ", i );
printf("%d, ", i--);
printf("%d, ", -i );
printf("%dn", -i--);
}
//输出:9, 8, 8, 9, -8, -9
</pre>

 

 

//例
<pre>
/#C语言详解,C语言学习笔记。include<stdio.h>
void main()
{
char a, b, c;
scanf("%c%c%c", &a, &b, &c);
printf("There are chars: %c, %c, %c n", a, b, c);
}
//输入:a b c
//输出:a, , b (注:这里的空格’ ’也是char类型所以为有效字符)
</pre>

#include <stdio.h>

  putchar('c'); 

image.png

 

 

image.png

例1. 运行以下程序,输入:Hello!<回车>

 

scanf()函数的格式字符串: 一般形式为:%[*][输入数据宽度][C语言详解,C语言学习笔记。长度]类型(注:方括号[]为任选项)
1)类型:表示输入数据的类型,其格式和意义如下表:

1.3 getche()与getch()

可以看到,在复合语句中声明的变量只在复合语句中起作用。

scanf()函数注意事项:
1) scanf()函数没有精度控制,所以 scanf(“%5.2f”, &a) 是非法的;
2)scanf()函数中要求给出变量地址,如给出变量名则会出错,如scanf(“%f”, &a)是合法的。
3)在输入多个数值数据时,若格式控制中没有非格式字符串作输入数据之间的间隔则可用空格,Tab或回车作为间隔(C语言编译时碰到空格,Tab或回车或者非法数据时(即不符合要求或规范的输入数据),即认为该数据结束。)
4)在输入字符数据时,若格式控制字符串中无非格式字符,则认为所有输入的字符均为有效字符。

 

 

5)如果格式控制字符串中有非格式字符则输入时也要输入该非格式字符串(否则不能正确输出)

getch(): 它与getche()的区别是,getch()不需将所输入的字符显示到屏幕上。

//例
<pre>
/#include<stdio.h>
void main()
{
C语言详解,C语言学习笔记。int a, b;
scanf("MM", &a, &b);
printf("This is a number: %d, %d n", a, b);
}
//输入:12345678
//输出:This is a number:1234, 5678
</pre>

<pre>
/#include<stdio.h>
void main()
{
int a;
scanf("M", &a);
printf("This is a number: %d n", a);
}
//输入:12345678
//输出:This is a number: 1234 (只截取有效的4位数)
</pre>

    putchar('n');
C语言详解,C语言学习笔记。}

#include "stdio.h" 

2)标志:标志字符为-、 、#、空格四种,其意义下表所示:

#ifndef _FILE_DEFINED
struct _iobuf {
        char *_ptr;
        int   _cnt;
        char *_base;
        int   _flag;
        int   _file;
        int   _charbuf;
        int   _bufsiz;
        char *_tmpfname;
        };
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif

 

3)宽度: 用十进制整数制定输入的宽度(即字符数)。

 

 

图片 2

test case #5:
输入:123.45<空格>6<空格>7<回车>
输出:123 0.450000 6.000000

  }                         /*复合语句结束*/ 

  1. 程序的基本结构(从程序流程角度):1)顺序结构;2)分支结构;3)循环结构

  2. C语言的程序功能是由执行语句实现的,语句可分为5类:1)表达式语句;2)函数调用语句;3)控制语句;4)复合语句;5)空语句
    1)表达式语句:由表达式加上分号”;”组成
    一般形式为:表达式 ;
    表达式语句的目的就是计算表达式的值。
    2)函数调用语句:由函数名、实际参数加上”;” 组成
    一般形式为:函数名(实际参数表);
    执行函数语句就是调用函数体并把实际参数赋予函数定义中的参数形式,然后执行被调用函数体中的语句,求取函数值。
    例,printf(“This is an example!”); 这里调用库函数printf(),来输出字符串。
    3)控制语句:用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。C语言有九种控制语句。可分为:(1)条件判断语句:if语句、switch语句; (2) 循环执行语句:do while 语句、while语句、for语句; (3) 转向语句:break语句、goto语句、continue语句、return语句。
    4)复合语句:把多个语句用括号{}括起来组成的一个语句为复合语句(注:应把复合语句看成是单条语句,而不是多条语句。)

    例,{
    int a, b, c;
    a = 1;
    b = 2;
    c = a b;
    printf(“%c”, c);
    } 这就是一条复合语句

    5)空语句:只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作控循环体。

    例, while(getchar() != ‘n’)
    {
    ;
    } (本语句的功能是,只要从键盘输入的字符不是回车,则重新输入)

  3. 赋值语句
    给变量赋初值和赋值语句的区别:给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其他同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。(注:在变量说明中,不允许连续给多个变量赋值,例如,int a = b = c = 1;是错误的,应该是int a =1, b = 1, c = 1;)
    赋值表达式和赋值语句的区别:赋值表达式是一种表达式,他可以出现在任何语序表达式出现的地方,而赋值语句则不能。(例, 合法语句 if((x = y 5) > 0) z = x;)(非法语句if((x = y 5;) > 0): z = x;)

  4. 数据输入输出概念及在C语言中的实现
    1)在C语言中,所有的数据输入/输出都是由库函数完成的。因此都是函数语句。
    2)在使用C语言库函数时,要用预编译命令#include 将有关“头文件”包含到源文件中。
    (例如, #include<stdio.h>或#include”stdio.h”(注:是standard input & output的意思))
    3)因为printf() 和scanf()函数使用频繁,系统允许在使用这两个函数时不加#include<stdio.h>或#include”stdio.h”(会warning,但是为了养成好的编写程序习惯,要写上)

    • putchar() 函数:是字符输出函数,其功能是在显示器上输出单个字符。
      一般形式是:putchar(字符变量); (注:对控制字符则执行控制功能,不在屏幕上显示。且在使用前要调用“stdio.h”头文件)

    • getchar()函数:功能是从键盘上输入一个字符。 一般形式为:getchar(); (通常情况下会把输入的字符赋值给一个变量,即 char a; a = getchar();) (注:getchar()使用不需要调用头文件)

    • printf()函数:使用printf()函数时需要注意输出列表中的求值顺序。不同的编译器不一定相同,可以从左到右,也可以从右到左。

例3. 测试getche()和getch()

  int a=11,b=21,c=31; 

图片 3

int main()
{
    char c1, c2;
    printf("Enter an Chinese character: ");

 

  1. 输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。
  2. 精度: 精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
  3. 长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。

printf("%dn", 365);
printf("-n", 365);
printf("]n", 365);
printf("%fn", 3.14);
printf("on", 3.14);
printf("fn", 3.14);

  c=getch();                 /*从键盘上读入一个字符不回显送给字符变量c*/ 

//例
<pre>
/#include<stdio.h>
void main()
{
char a, b, c;
scanf("%c, %c, %c", &a, &b, &c);
printf("There are chars: %c, %c, %c n", a, b, c);
}
//输入:a, b, c
//输出:a, b, c
//输入:a b c
//输出:a, ,
</pre>

 

#include "stdio.h" 

    putchar(c1);
    putchar(c2);

调用形式:scanf(格式控制语句,输入项);

 

两者的区别是:getch()函数不将读入的字符回显到屏幕上,getche()却显示。

 

 

test case #6:
输入:1234.5<空格>6<空格>7<回车>
输出:123 4.500000 6.000000

#include "stdio.h" 

void main()
{
    int ch;

  printf("m=%dn",m); 

int main()
{
    char c1, c2;

 

test case #4:
输入:1.23<空格>4<空格>5<回车>
输出:1 0.230000 4.000000

   printf("%d",c);                  /*函数调用语句  */ 

#define EOF  (-1) //EOF的定义

常见的格式控制符:

/* 标准I/O设备数组_iob[]的定义 */
#ifndef _STDIO_DEFINED
_CRTIMP extern FILE _iob[];
#endif 

循环流程控制语句:for、while、do while。

main()
{
    int a;
    float b,c;
    scanf("=%f%f",&a,&b,&c);
    printf("%d %f %f n", a, b, c);
}

#include<stdio.h> 

printf("%3.3fn", 3.1415);
printf("%3.5fn", 3.1415);
printf("%9.5fn", 3.1415);
printf("%9.0fn", 3.1415);

}

以下是针对该图的C程序,数据输入为:10<空格>20<空格>30<空格>40<回车>

 

注:由于缓冲区的读取特性,当用户由键盘键入字符时,计算机并不会马上处理,而会暂存到系统的缓冲区(Buffter)内。到按【Enter】键后,getchar()函数才会读入缓冲区的第一个字符。而其它字符继续保留在缓冲区,等待下一个读取字符/字符串的函数来读入。

  putchar(c1); 

其实,当我们输入数据时,只要没有按回车键,所输入的数据都还存放在缓冲区,并没有存入变量中。按【Enter】键后,scanf()函数才会从缓冲区中取走数据。缓冲区是一个先进先出的队列,即取走数据的时候,遵循先输入的数据先取走的原则。scanf函数的格式说明符有几个就要取几次数据,只要碰到格式说明符就必须把数据取走,至于是不是要把取走的数据存放起来,就得看数据列表中的数据个数。没取完的数据继续留在缓冲区中。

  double x1,x2,p; 

 

main(){ 

注:由对比可知,当输入第一个数据时,只输出了字母“B”,汉字“超”没有输出。原因是一个汉字需要两个字节(字符)才能表示,所以对于第一个输入而言,所输入的字符“超”的第二个字节内容仍然保留在缓冲区。第二次运行,只输入“超”字时,通过两个getchar()函数将缓冲区中的“超”字全部读出,并用两次putchar()显示了一个完整的汉字。

  ch=getche();               /*从键盘上带回显的读入一个字符送给字符变量ch*/ 

    putc(ch, pfout); //使用putc()函数输出该字符
    putc('n', pfout); //使用putc()函数输出换行字符
}

main() 

scanf输入字符串可以配合%s格式,但缺点是当遇到字符串中有空白或tab字符时,会自动视为串输入结束。因此不适合输入包含空白/tab字符的字符串。这时gets()函数就可解决该问题。

 

    printf("Enter a string: "); 
    gets(s);

a=11 b=21 c=31

int main()
{
    char s[50];

  p=b*b-4*a*c;                   /*p存放判别式的值*/ 

以下输入输出库函数的操作主要在标准输入输出设备(键盘和屏幕)与数据缓冲区之间进行。

#include "stdio.h" 

#include <stdio.h>

#include <stdio.h> 

以下是缓冲区示意图,它像一根管道,有一个入口和一个出口,数据只能从入口中存入,只能从出口中取出。

 

比较适合应用在多字符,中文字或长字符串的读取。

test case #3:
输入:1234<空格>5<空格>6<回车>
输出:123 4.000000 5.000000

int b=22;                 /*复合语句开始*/ 

#define feof(_stream)     ((_stream)->_flag & _IOEOF)
#define getc(_stream)     (--(_stream)->_cnt >= 0 
                ? 0xff & *(_stream)->_ptr  : _filbuf(_stream))
#define putc(_c,_stream)  (--(_stream)->_cnt >= 0 
                ? 0xff & (*(_stream)->_ptr  = (char)(_c)) :  _flsbuf((_c),(_stream)))
#define getchar()         getc(stdin) //调用getchar()时,实际调用的是getc(stdin)
#define putchar(_c)       putc((_c),stdout) //调用putchar(_c)时,实际调用的是putc((_c), stdin)

语句n;

int main()
{
    int a, b, c;

 

putchar(): 用来输出指定的单一字符。

1.4复合语句:由一些语句组成,放在一个大括号中形成一个整体,句型如下:

test case #1:
输入:1<空格>2<空格>3<回车>
输出:1 2.000000 3.000000

6字符输入

输出效果:

 

(1) 在%和格式字符之间加入一个整数来控制输出数据所占宽度

1语句概述

/* 宏定义 */

  putchar('B'); 

    printf("The character getche() read: %c n", c1);
    printf("The character getch() read: %c n", c2);
}

 

1.1 printf()与scanf ()

语句1;

#include <stdio.h>

1.1普通表达式语句:表达式后加分号就是一个表达式语句,语句与表达式不同,是无值的,而表达式是有值的。 1.2流程控制语句...

scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。

  if(b>a)                         /*控制语句  */ 

gets()函数会将用户整段字符串响应到标准输出设备(屏幕)上,当用户按下【Enter】键时,会读取缓冲区的所有字符并存放到指定字符数组中。

摘自 letthinking的专栏

    printf("The Chinese character entered is: ");

 

1、格式说明符个数与输入数据个数不相等的情况:

  char a,b,c; 

 

 

    scanf("%d", &c); /* scanf中只有1个格式说明符,表明要取1次数据,取走30
                               缓冲区中还剩下40,因此,读者还可以取一次。。。。。
                            */
    printf("c=%d n", c);

 

例4. 测试gets()和puts()

4.1字符输出可以利用putchar函数,在stdio.h中已经定义。

_CRTIMP int __cdecl printf(const char *, 图片 4);
_CRTIMP int __cdecl putc(int, FILE *);
_CRTIMP int __cdecl putchar(int);
_CRTIMP int __cdecl puts(const char *);

 

printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。

 

基于以下程序进行测试,测试结果如下:

例子代码:

Enter a string: Testing!
T
Press any key to continue

  ;                               /* 空语句*/ 

整数1:整个输出数据占的总宽度

  {;                              /* 复合语句  */ 

 

例如:printf("%f",j); 输出浮点类型的变量j,%f为控制符。

#include <stdio.h>
#include <conio.h> /* getche(), getch() */

 

    FILE *pfin = stdin; //定义一个文件指针,并指向标准输入设备(键盘)
    FILE *pfout = stdout; //定义一个文件指针,并指向标准输出设备(屏幕)
    
    printf("Enter a string: ");
    
    ch = getc(pfin); //使用getc()函数获取缓冲区中的第一个字符

  scanf("%lf%lf%lf",&a,&b,&c);      /*输入系数*/ 

    return 0;
}

%d--十进制整型,%o---八进制无符号整型,%f输出实数,%s--字符串,%c--输出单个字符等。

    scanf("%d%d", &a, &b); /* scanf中有2个格式说明符,表明要取两次数据,取走10和20
                                         缓冲区中还剩下30和40
                                      */
    printf("a=%d b=%d n", a, b);

  putchar(c2); 

1.4 gets()与puts()

a=11 b=22 c=3.300000

#define stdin  (&_iob[0])
#define stdout (&_iob[1])
#define stderr (&_iob[2])

本文由澳门正规赌博十大网站发布于澳门游戏网站,转载请注明出处:C语言详解,C语言学习笔记