苏嵌实训——day3(上)

简介: 苏嵌实训——day3(上)

一 输入输出函数


1.1 getchar()/putcgar()


1.1.1getchar()


头文件:#include

原型:int getchar(void);

功能:从终端读取一个字符

参数:无

返回值:从终端读取到的字符


#include <stdio.h>
int main(int argc, const char *argv[])
{
  /*int ch;
  ch = getchar();
  printf("ch = %c %d\n",ch,ch);
*/
  int a,b,c;
  a = getchar();
  b = getchar();
  c = getchar();
  printf("a = %c %d\n",a,a);
  printf("b = %c %d\n",b,b);
  printf("c = %c %d\n",c,c);
  return 0;
}


1.1.2 putchar


头文件:#include 
原型:int putchar(int c);
功能:向终端输出一个字符
参数:c:要输出的字符
返回值:输出的字符
#include <stdio.h>
int main(int argc, const char *argv[])
{
  //参数为一个字符
  putchar('w');
  putchar('\n');
  //参数为一个ascii
  putchar(97);
  putchar(10);
  int a = 'h';
  int b = 10;
  putchar(a);
  putchar(b);
  return 0;
}


1.2 gets()/puts()


1.2.1 gets()


头文件:#include 
原型:char *gets(char *s);
功能:从终端读取一个字符串
参数:s:保存读取的数据的内容,一般是一个数组,char buf[32]
返回值:保存的字符串


#include <stdio.h>
int main(int argc, const char *argv[])
{
  char str[32] = {0};
  gets(str);
  printf("str = %s\n",str);
  return 0;
}


1.2.2 puts()


头文件:#include 
原型:int puts(const char *s);
功能:向终端输出一个字符串
参数:s:要输出的内容
返回值:输出的字符串的字节数


#include <stdio.h>
int main(int argc, const char *argv[])
{
  //puts函数自带换行功能
  puts("hellworld");
  char s[32] = "helloworld";
  puts(s);
  char buf[32] = {0};
  gets(buf);
  puts(buf);
  return 0;
}


3.3 printf()/scanf()


3.3.1 printf()


printf函数是一个行缓冲函数(1024K),先将内容写到缓冲区,满足一定条件后,才会将内容写入对应的文件或者流中
1.缓冲区满
2.写入的字符中有‘\n’,'\r'
3.调用fflush或stdout手动刷新缓冲区
4.调用scanf等要从缓冲区读取数据时,也会将缓冲区内的数据刷新
5.程序结束时


头文件:#include 
原型:int printf(const char *format, ...);
功能:向终端按照格式输出字符串
参数:format:带格式要输出的内容
    普通字符:原样输出
      例如:printf("hello world!\n");
     格式说明: %[修饰符]格式字符,用于指定格式输出
      例如:printf("a = %d\n",a);
        %d: 32位有符号十进制数
        %u: 32位无符号十进制
          %o: 八进制
          %x: 十六进制
            %e: 指数形式
           %c: 字符
           %s: 字符串
           %%:输出%本身
           %p: 输出地址
    附加格式字符:
      #: 用于输出八进制或者十六进制的前导符
      l: 用于输出long类型或者double类型的数据
        m: 设置输出内容的宽度
              如果数据的宽度大于等于m,则没有影响,
              如果数据的宽度小于m,则默认右对齐,做扁的位置补空格
      0:当设置宽度后,默认右对齐,左边空格的位置补0
        -:将右对齐改成左对齐
        .n:保留小数点后n位
        arg:可变参,可以有,也可以没有,也可以有多个
返回值:输出的字节个数
#include <stdio.h>
int main(int argc, const char *argv[])
{
  int num = 256;
  printf("%d%d%d\n",num,num,num);
  //5:将输出的宽度设置为5
  printf("%5d%5d%5d\n",num,num,num);
  //0:右对齐左边补0 
  printf("%05d%05d%05d\n",num,num,num);
  //-:右对齐改成左对齐  
  printf("%-5d%-5d%-5d\n",num,num,num);
  //:0不能用于左对齐 
  printf("%-05d%-05d%-05d\n",num,num,num);
  float f = 45.45678912345;
  printf("f = %f\n",f);
  //.2:保留小数点后2位,并且会四舍五入
  printf("f = %6.3f\n",f);
  printf("f = %p\n",&f);
  return 0;
}


3.3.2 scanf()


头文件:#include 
原型: int scanf(const char *format, ...);
功能:按照格式从终端输入指定的内容
参数:format:含有格式的字符的内容
    格式字符:
      %d 整形数据
      %f 浮点型数据
        %c 字符数据
        %s 字符串数据
        。。。
返回值:成功保存的内容的个数


#include <stdio.h>
int main(int argc, const char *argv[])
{
  /*
  int num;
  int ret = scanf("%d",&num);
  printf("ret = %d,num = %d\n",ret,num);
  */
  /*
  char ch;
  scanf("%c",&ch);
  printf("ch = %c %d\n",ch,ch);
  */
  /*
  char buf[32] = {0};
  //scanf默认只能保存一个不带空格的字符串
  scanf("%s",buf);
  //找到换行符才结束输入
  scanf("%[^\n]",buf);
  printf("buf = %s\n",buf);
  */
  /*int num;
  scanf("[%d]",&num);
  printf("num = %d\n",num);
  */
  int a,b,c;
  scanf("%d,%d,%d",&a,&b,&c);
  printf("a = %d,b = %d,c = %d\n",a,b,c);
  return 0;
}


3.3.3 scanf附加字符


m:设置输入的宽度,如果输入的内容超过设置的宽度,只会保存设置宽度的内容

:抑制符,当带有的格式的字符输入的内容不会保存到与之对应的变量中,而是将下一个不带*的格式的字符的内容保存在之前的变量中


#include <stdio.h>
int main(int argc, const char *argv[])
{
  /*
  int year,month,day;
  scanf("%2d%2d%2d",&year,&month,&day);
  printf("%d/%d/%d\n",year,month,day);
  char buf[32] = {0};
  scanf("%5s",buf);
  printf("buf = %s\n",buf);
  */
  int a,b,c;
  scanf("%d %*d %d %*d %d",&a,&b,&c);
  printf("a = %d,b = %d,c = %d\n",a,b,c);
  return 0;
}


3.3.4 scanf输入多个内容以及垃圾字符的处理


#include <stdio.h>
int main(int argc, const char *argv[])
{
#if 0
  int a,b,c;
  scanf("%d %d %d",&a,&b,&c);
  printf("a = %d,b = %d,c = %d\n",a,b,c);
#endif
#if 0
  char a,b,c;
  scanf("%c%c%c",&a,&b,&c);
  printf("a = %c,b = %c,c = %c\n",a,b,c);
#endif
  /* 一个scanf处理垃圾字符 */
//方法1:使用抑制符
/*  char a,b,c;
  scanf("%c%*c%c%*c%c",&a,&b,&c);
  printf("a = %c,b = %c,c = %c\n",a,b,c);*/
//方法2:使用空格隔开
  /*char a,b,c;
  scanf("%c %c %c",&a,&b,&c);
  printf("a = %c,b = %c,c = %c\n",a,b,c);*/
  /*多个scanf处理垃圾字符*/
  int id;
  char name[32];
  char sex;
  int score;
  char bg;
  /*
  printf("请输入学号:");
  scanf("%d",&id);
  printf("请输入姓名:");
  scanf("%s",name);
  printf("请输入性别:");
  scanf("%c",&sex);
  printf("请输入分数:");
  scanf("%d",&score);
  printf("请输入年龄:");
  scanf("%d",&age);
  */
#if 0  //使用抑制符
  printf("请输入学号:");
  scanf("%d",&id);
  printf("请输入姓名:");
  scanf("%s",name);
  printf("请输入性别:");
  scanf("%*c%c",&sex);
  printf("请输入分数:");
  scanf("%d",&score);
  printf("请输入是否有女朋友:");
  scanf("%*c%c",&bg);
#endif
#if 0  //使用getchar
  printf("请输入学号:");
  scanf("%d",&id);
  printf("请输入姓名:");
  scanf("%s",name);
  getchar();
  printf("请输入性别:");
  scanf("%c",&sex);
  printf("请输入分数:");
  scanf("%d",&score);
  getchar();
  printf("请输入是否有女朋友:");
  scanf("%c",&bg);
#endif
// 使用空格
  printf("请输入学号:");
  scanf("%d",&id);
  printf("请输入姓名:");
  scanf("%s",name);
  printf("请输入性别:");
  scanf(" %c",&sex);
  printf("请输入分数:");
  scanf("%d",&score);
  printf("请输入是否有女朋友:");
  scanf(" %c",&bg);
  return 0;
}


二 控制语句


2.1 概念


控制语句主要解决一些代码需要执行,一些代码不执行,或者相同的代码要执行很多次。

分类:


分支语句:
if...esle
switch...case...
循环语句:
goto
while
do...while...
for
辅助控制关键字:
goto
break
continue
return


2.2 if…else语句


2.2.1 if语句的形式


if(表达式)
{
    语句块
}
或:
if(表达式)
{
  语句块1   
}
else
{
    语句块2
}
if(表达式1)
{语句块1}
else if(表达式2)
{语句块2}
else
{语句块3}
注意事项:
    1.if的表达式非0即为真
        if(0)  //假
        if(1)  //真
        if(0.00000001)  //真
        if(a)---->if(a != 0)
        if(!a) ---->if(a == 0)
        if(a = 0)  //假
        if(a = 1) //真
    2.if或者else语句后面只有一条代码,可以不加{},但是一般为了不产生歧义,最好加上
    3.else 后面不能跟表达式
    if和else只能执行一条
    else不能单独使用,而且else默认和与之最近的一个if关联。
    if(表达式1)
    {
      if(表达式2)
      {
        }
    }


2.2.2 练习:大小写转换


在终端输入一个字符,如果是大写字母,将其转化为小写字母,如果是小写字母,将其转化为大写字母,并输入,如果是字符数字,将其转化为数字输出。

‘h’---->‘H’
‘H’---->‘h’
‘6’----->6
#include <stdio.h>
int main()
{
  char a;
  a = getchar();
  if(a >= 'a' && a <= 'z')
  {
  a = a - ('a' - 'A');
  putchar(a);
  }
  else if (a >= 'A' && a <= 'Z')
  {
  a = a + ('a' - 'A'); 
  putchar(a);
  }
  else if (a >= '0' && a <= '9')
  {
  printf("%d\n",a - 48);
  }
  else
  {
  printf("error");
  }
  return 0;
 }


2.3 swich…case语句


switch语句和if语句一样,也是分支语句,只不过switch语句用于条件过多的情况下使用


2.3.1格式


switch(变量或者变量表达式)
{
    case 常量或者常量表达式1:
      语句块1;
      //break;
    case 常量或者常量表达式2:
      语句块2;
      break;
      case 常量或者常量表达式3:
  语句块3;
    break;   
     case 常量或者常量表达式4:
      语句块4;
    break;  
    defalut:
      语句块n;
      break;           
}


#include <stdio.h>
int main(int argc, const char *argv[])
{
  int num;
  printf("***1.注册 2.登录 3.退出***\n");
  printf(">>>> ");
  scanf("%d",&num);
  switch(num)
  {
  case 1:
  printf("正在执行注册操作\n");
  break;
  case 2:
  printf("正在执行登录操作\n");
  break;
  case 3:
  printf("正在退出,请稍等..\n");
  break;
  default:
  printf("您输入有误,请重新输入\n");
  break;
  }
  return 0;
}
相关文章
|
3月前
|
算法 前端开发 Java
思途实训-day03-04
思途实训-day03-04
|
消息中间件 Linux
苏嵌实训——day16(下)
苏嵌实训——day16(下)
苏嵌实训——day16(下)
|
网络协议 安全 网络安全
苏嵌实训——day18
苏嵌实训——day18
苏嵌实训——day18
|
存储 程序员 Linux
苏嵌实训——day14(上)
苏嵌实训——day14(上)
苏嵌实训——day14(上)
|
存储
苏嵌实训——day11(下)
苏嵌实训——day11(下)
苏嵌实训——day11(下)
|
存储
苏嵌实训——day11(上)
苏嵌实训——day11(上)
苏嵌实训——day11(上)
|
存储 Ubuntu 固态存储
苏嵌实训——day1
苏嵌实训——day1
136 0
苏嵌实训——day1