学习 C 的好日子--输入与输出S&P

1.>SCANF

1.1-函数原型

int scanf( const char *format [,argument]... );

返回值

返回值
如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

1.2-我们甚至可以加上一些限制性的

1.像这样的就只输出大写的(且是遇见第一个非大写字母的就停止了)

2.我们写的这些字符串 遇见了‘ ’的时候就会停止了;printf也不会输出了

(这时我们需要gets)

//scanf
#include<stdio.h>
int main(){
    char arr[100];
    scanf("%[A-Z]s",arr);
    printf("%s",arr);
} 
//gets原型  <stdio.h>
char *gets( char *buffer );

“输入控制符”和“输出控制符”要一模一样的。

这也就让我们很好的区分了从键盘上的上的是字符‘1’‘2’or数字789

(是%d就printf %d)(是%c就printf %c)

保证数据类型的对应

      (举几个例子)
char -->%c
char arr[]-->%s

int ->%d
long int  -->%ld
long long int-->%lld
int *p-->%p

float-->%f
double-->%lf

//有时候我们需要无符号形式
//如:
unsigned int-->%ud

格式控制符

说明

%c

读取一个单一的字符

%hd、%d、%ld

读取一个十进制整数,并分别赋值给 short、int、long 类型

%ho、%o、%lo

读取一个八进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型

%hx、%x、%lx

读取一个十六进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型

%hu、%u、%lu

读取一个无符号整数,并分别赋值给 unsigned short、unsigned int、unsigned long 类型

%f、%lf

读取一个十进制形式的小数,并分别赋值给 float、double 类型

%e、%le

读取一个指数形式的小数,并分别赋值给 float、double 类型

%g、%lg

既可以读取一个十进制形式的小数,也可以读取一个指数形式的小数,并分别赋值给 float、double 类型

%s

读取一个字符串(如:以空白符为结束 ‘ ’or‘\n’)


插播一下EOF

#include <stdio.h>
int main(){
    //EOF---END OF  FILE 本质是-1
    char ch;
    while((ch=getchar())!=EOF){
    putchar(ch);
    }
}

参考的菜鸟教程里的


1.3-常见的书写方式:

(1)scanf("输入控制符", 输入参数); %d %c %s 等等

需要注意的是,出来字符串的输入,其他必须在 输入参数这里必须加上'"&"使得其获取该变量或者整形的数组的地址。

而像上方不加的原因是因为 在数组中数组名可以表示首元素的地址,那么我们就可以通过首元素将一串的地址获取到(因为我们开辟了就那么大遇见了‘\n’自然就结束,不闭担心)。

对此我们可以对比一下

1.》首地址写法:

#include<stdio.h>
int main(){
    char ad[100];
    scanf("%s",ad);//首地址形式的必须加
    printf("%s",&ad[0]);

2》数组名写法:

#include<stdio.h>
int main(){
    char ad[100];
    scanf("%s",ad);//这里的话数组名对于去地址符号要求都可以的
    printf("%s",ad);
} 

(2)第二种写法(“a=%d”,&a)

这样的写(在谭浩强的那本书里就有这种写的题目 我们需要明白输入的格式是相当的严格的;

这种的必须 需要你的键盘上打出a=?(你的想要的数字)b=?(一样的道理)。

正所谓红花配绿叶 总不能吧将杂交起来吧(我说的是别 浮点型 、整形、字符混在一起)

(而且我们“ ”里的东西有啥就输入啥,我想说的是引号里的‘,’也需要打上)。

1.4-注意事项

  1. 参数的个数一定要一一对应

  1. 输入的数据类型一定要与所需要的数据类型一致

  1. 原样输入的,有几个就要输入几个,少一个字符或多一个',’都不行

  1. 是英文输入的“引号”,“&取地址”连“(括号)”也一样(毕竟是英文的)

  1. 写点注释 方便后续知道自己写的是什么

**

  • 1. & 是地址运算符,分别获得变量的内存地址。

  • 2、%d%d%d 是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab 键、回车键分隔。

如果使用 , 来分隔输入的 %d, 相应的输入时也需要添加 ‘,’(英文的逗号就英文,避免在中英文切换过程中产生错误)


1.5-实例

#include<stdio.h>
int main() { 
    int a,b,c; 
    printf("请输入三个数字:");
    scanf("%d%d%d",&a,&b,&c); 
    printf("%d,%d,%d\n",a,b,c);
    return 0; 
}

//请输入三个数字:1 2 3
//1,2,3

2.>PRINTF

2.1-函数原型

int printf( const char *format [, argument]... );

返回值

如果成功,则返回写入的字符总数,否则返回一个负数。

#include<stdio.h>
int main(){
    printf("%d",printf("%d",printf("%d",43))); //4321
}
#include<stdio.h>
int main(){
    printf("%d",printf("%d",printf("%d",543)-1)); //54321
}

printf函数的返回值是打印的所有字符的总数(包括转义字符)。


2.2-输出形式

  • %d 十进制有符号整数

  • %u 十进制无符号整数

  • %f 浮点数 %f格式字符只能输出6位小数

  • %s 字符串

  • %c 单个字符

  • %p 指针的值

  • %e 指数形式的浮点数

  • %x, %X 无符号以十六进制表示的整数(还有一点 X和x这大小写会影响十六进制的ABCDEF还是a,b,c,d,e,f)

  • %o 无符号以八进制表示的整数

  • %g %G把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出

  • %p 输出地址符

  • %lu 32位无符号整数

  • %llu 64位无符号整数

  • %a%A是以指数形式输出一个浮点数(十六进制)同样的:%a以小写显示abcdef,%A以大写字母显示ABCDEF

  • %%输出一个%

例子

1.0 可以将整形 类型转换 为浮点型

#include<stdio.h>
int main(){
    int a = 1.0;
    printf("%f\n",1.0*a/3);
    return 0;
} 

指定数据宽度和小数位数用%m.nf

输出的数据向左对齐,用%-m.nf。

(可以在谭浩强老师那这本书里找见)


2.3-注意事项

  1. 前导0 :%02d a=2; printf("%02d",a);

  1. 如果我们需要输出‘’或者‘\’ 那么我们就需要引入转义字符这个概念,因为‘’会找到第一个‘’与之联系

就像if....else 就找最近的

转义字符

解决办法 加上\ --》》\'' 就解决了

举例

#include<stdio.h>
int main()
{
int a=2;
    printf("\'");//将会打印一个'(单引号)
   printf("\"");//将会打印出"(双引号)
    printf("\\");//将会打印出\(反斜杠)
   printf("%d\ndef",a);
    return 0;
}


2.4-例子

#include <stdio.h>
 
int main ()
{
   int ch;
 
   for( ch = 75 ; ch <= 100; ch++ ) {
      printf("ASCII 值 = %d, 字符 = %c\n", ch , ch );
   }
 
   return(0);
}


3.>putchar&getchar



1-putchar

3.1.1-函数原型

int putchar( int c );
//把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中。

3.1.2-返回值

该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF

3.1.3-例子

#include <stdio.h>
int main(){
    //EOF---END OF  FILE 本质是-1
    char ch;
    while((ch=getchar())!=EOF){
    putchar(ch);
    }
}
#include <stdio.h>

int main ()
{
   char ch;
   for(ch = 'A' ; ch <= 'Z' ; ch++) {
      putchar(ch);
   }

   return 0;
}
//ABCDEFGHIJKLMNOPQRSTUVWXYZ

2-getchar

3.2.1函数原型

int getchar(void)

3.2.2返回值

该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF

3.2.3例子

#include <stdio.h>
int main ()
{
   char c;
   printf("请输入字符:");
   c = getchar();
 
   printf("输入的字符:");
   putchar(c);

   return(0);
}

3.2.4区别

getchar只能读取一个字符(从缓冲区域提取出一个字符)

scanf却可以读取各种类型的数据(字符、字符串、整形、浮点型、地址等等)

scanf不能读取空格和回车


4.gets&&puts

4.1gets

函数原型

char *gets(char *str)

返回值

如果成功,该函数返回 str。如果发生错误或者到达文件末尾时还未读取任何字符,则返回 NULL。

好处

gets可以读‘ ’空格 而scanf("%s")就比不了

#include<stdio.h>
int main()
{
    char arr[100];
    gets(arr);
    printf("%s", arr);
    return 0;
}

例子

#include <stdio.h>

int main()
{
   char str[50];
   printf("请输入一个字符串:");
   gets(str);

   printf("您输入的字符串是:%s", str);
   return 0;
}

4.2puts

函数原型

int puts(const char *str)

返回值

如果成功,该函数返回一个非负值为字符串长度包括末尾的 \0),如果发生错误则返回 EOF。

例子

#include <stdio.h>
#include <string.h>

int main()
{
   char str1[15];
   char str2[15];

   strcpy(str1, "RUNOOB1");
   strcpy(str2, "RUNOOB2");

   puts(str1);
   puts(str2);
   
   return(0);
#include <stdio.h>
int main(){
    char str[]="hello world";
    puts(str+1); 
    return 0;
} 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你会魔法吗✧(≖ ◡ ≖✿)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值