04-输入输出

输入输出

1.字符输出函数

c语言中没有I/O语句,I/O操作由函数实现

#include <stdio.h

1.1 字符输出函数 - putchar

格式:putchar(c)
参数:c为字符常量\变量\表达式
功能:把字符c输出到显示器上
返回值:正常,为显示的代码值ASCII码
#include <stdio.h>

int main()
{
  int a = 65;
  char ch = 'B';
  putchar(a); // int值 -- 显示A
  putchar('\n'); // 字符 -- 显示换行
  putchar(ch); // 字符 -- 显示B
  
  return 0;
}

1.2 格式输出函数

printf("格式控制串",输出表)
功能:按照指定格式向显示器输出数据
输出表:要输出的数据
格式控制串:包含两种信息
  格式说明:%[修饰符]格式字符,用于指定输出的格式
  普通字符:原样输出

#include <stdio.h>

int main()
{
  int a = 255;
  char ch = 'C';
  char s[] = 'sdfsdf';  
  
  float fl = 567.534;
 
  printf("%d %o %x\n",a,a,a);
  printf("%c %d\n",ch,ch); // %c 打印字符  %d 打印字符ascii码值   
  printf("%s\n",s);
  printf("%f %e %g\n",fl,fl,fl);
  
  printf("%%"); // 打印一个%
  return 0;
}

1.3 附加格式说明符

m.n

int a = 1234;
float b = 123.456;
char ch = 'a';

printf("%8d,%2d\n",a,a); // 8d指的是数据位宽m ,不够左侧补空格
                          // 位宽 < 实际位数,原样输出
                          // 
printf("%8f,%8.1f,%.2f\n",f,f); // .n表示保留小数 

printf("%3c",ch); // 补充空格

char s[] = "Hello,World!";
printf("%15s\n",s); // 字符串打印15个字符长度,不够左侧补空格
printf("%15.5s\n",s); // 要打印15个,打印5个字符
printf("%2.5s\n",s); // 2 < 12(实际长度,原样输出),打印5个字符 
printf(".5s\n",s);  // 

0 + 
0 -- 用0填充
+ -- 整数显示加号
int a = 1234;
float b = 123.456;
char ch = 'a';

printf("%08d %0+8d\n",a); // 8d指的是数据位宽m ,不够左侧补0
                          // + 表示正数的时候添加加号                     
printf(%08.1f\n",f); //  

printf("%3c",ch); // 补充空格

2.字符输入函数

2.1 字符输入函数 -- getchar()

getchar()
  --格式:getchar()
  --功能:从键盘读取一个字符
  --返回值:正常,返回读取的ASCII码值;出错或者结束输入,返回-1(用int接收)
    ctrl d返回-1,表示结束输入
#include <stdio.h>

int main()
{
  int ch;
  printf("input:")
  ch = getchar();
  putchar(ch);  // 输入什么字符显示什么字符
  putchar('\n');
  printf("ch = %d\n",ch); // 结束键盘输入的时候显示-1
  return 0;
}

2.2 格式输入函数 scanf

scanf("格式控制串,地址表")
功能:按照指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束
  格式控制串可以表示输入的是多少进制的数
返回值:正常,返回输入数据的个数
地址表:变量的地址,常用取地址运算符&
#include <stdio.h>

int main()
{  
  int ch,n;
  printf("Enter a character:");
  
  n = scanf("%d",&ch); // 输入65
  
  printf("%d\n",ch);  // 打印65
  printf("n = %d\n",n); // n小于输入变量的个数表示输入失败
  
  
  return 0;
}


修饰符

#include <stdio.h>

int main()
{  
  int ch,n;
  // long m; 
  int y,m,d
  printf("Enter a character:");
  
  n = scanf("%x %ld",&ch,&m); // 输入 21 5
  
  // printf("n = %d\n, %d %ld",n,ch,m); //2 33 5  
   
  scanf("%4d%2d%2d",&y,&m,&d); // 20221213  
                               // 4d 表示位宽 -- 自动将输入的前四位给y 
  printf("%d %d %\n",y,m,d);// 2022 12 13
  return 0;
}
* -- 抑制符,输入的值不赋值给变量
scanf("%2d%*3d%2d",&a,&b);  // 1234567  a = 12 b = 67 中间取到值不给变量
// 字符型变量连续输入
#include <stdio.h>
int main()
{
  char y,m,d;
  
  scanf("%c%c%c".&y,&m,&d);
  
  printf("%d:%d:%d\n",y,m,d);
                              // 输入abc 打印97:98:99
                              // a  b c  97:32:32
                              // 字符型变量在进行连续输入的时候,空格和转义字符是有效字符
                              // 数值型进行连续输入的时候空格不是有效字符
  return 0;
}

总结:整型数据输入的时候,遇到空格\会出\TAB都认为是数据结束,此外,非法输入(整型输入字母)和遇到宽度也表示结束

scanf("%d%c%f",&a,&b,&c);

输入:1234a123o.26
a = 1234 b = 'a' c = 123

3.输入函数留下的"垃圾"

int a ;
char x;
printf(">");
scanf("%d",&a);
scanf("%c",&x);

printf("%d:%c:%d\n",a,x,x);  // 输入5,然后回车,打印 5:回车:10
                             // 回车会赋值个x
// 方法1:使用getchar清除
int x;
char ch;

scanf("%d",&x);
getchar()
ch = getchar();

printf("x = %d,ch = %d\n",x,ch);

// 方法2:使用空格%c或者%*c接收字符型数据
int x;
char ch;

scanf("%d",&x);
// scanf(" %c",&ch);
scanf("%*c",ch);

printf("x = %d,ch = %d\n");

4.字符串输入输出函数

4.1 字符串输入函数-gets

gets
  格式:char * gets(char *s)
  功能:从键盘输入一个以回车结束的字符串放入字符数组中,并且自动加入'\0'
  说明1:输入串长度应小于字符数组长度
  说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志
char s[5];  // 定义长度为5的字符数组用于存储字符串,只能存储4个
gets(s);    // 输入字符串
printf("%s\n",s) // 打印字符串

// 用户输入字符串的长度超过字符数组的长度,会报错
// 这个函数是有风险的
char s[5];
scanf("%s",s); // 空格会作为分割符结束,可以用循环,使用%c存储空格
printf("%s\n",s);

4.2 字符串输出函数-puts

char s[5];
gets(s); 
printf("s:%s",s); // printf() 默认不换行
printf("***\n");
puts("$$$$"); // 自动换行
puts(s);  
puts
  格式:int puts(const char *s)
  功能:向显示器输出字符串(输出完,换行)
  说明:字符数组必须以'\0'结束
#include <stdio.h>
#include <math.h>
int main()
{
  int a,b,c;
  int delt;
  float result1,result2;
  
  scanf("%d%d%d",a,b,c);  
  delt = b*b-4*a*c;
  result1 = [(-b)+sqrt(delt)]/(2*a);
  result2 = [(-b)-sqrt(delt)]/(2*a);

  printf("result1 = %f,result2 = %f\n",result1,result2);
  return 0;
}
posted @ 2023-05-18 23:27  Icer_Newer  阅读(110)  评论(0编辑  收藏  举报