C语言字符串输入输出:scanf(), gets(), getchar(), puts(), putchar()

目录

 >>> scanf()

 >>> getchar()与putchar()

>>> gets()与pur()

 >>> scanf()

1.函数原型:

#include<stdio.h>

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

*** 返回值:正常情况下,返回读出成功的项数;输入类型不匹配和读取失败返回0;如果遇到错误或者遇到end of file,返回EOF。(end of file指ctrl z或者ctrl d)

2.在输入字符串时存在的不足:

*** 输入的字符串中不能有空格或制表符等, 比如输入"aa bb cc"的话,字符串只会接收到aa,遇空格就结束.

*** 从缓存区读取字符串时不包含结尾的回车(\n)。

#include <stdio.h>
int main()
{
	char str[20] = { 0 };
	printf("请输入字符串:");
	scanf("%s", str);
	printf("%s\n", str);
	return 0;
}
//程序结果:
//输入:aabbcc  输出:aabbcc
//输入:aa bb cc   输出:aa


//可以用getcahr()吃掉scanf()遗留的'\n'
#include <stdio.h>
int main()
{
	char str[20] = { 0 };
	printf("请输入字符串:");
	scanf("%s", str);
	printf("还要输入一个字符:\n");
	getchar();   //getchar直接接收了scanf遗留的'\n',并没有等待用户输入
	printf("输出字符串:%s\n", str);
	return 0;
}
//程序结果:
//请输入字符串:asdf
//还要输入一个字符:
//输出字符串:asdf

 >>> getchar()与putchar()

1.getcahr()函数原型:

#include <stdio.h>

int getchar( void );

*** 返回值:读取的字符

2.putchar()函数原型:

#include <stdio.h>

int putchar( int c );

*** 返回值:要打印的字符

#include <stdio.h>
int main()
{
	int i = 0;
	char str[30] = { 0 };
	printf("请输入字符串:");
	char a;  //int a;
	while ((a = getchar()) != '\n')
	{
		str[i] = a;
		i++;
	}
	//str[i] = '\0';  //使用printf打印时必须加'\0'
	//printf(str);
	for (int j = 0; j < i; j++)
	{
		putchar(str[j]);
	}
	return 0;
}
//结果:
//请输入字符串:I am handsome
//I am handsome


//错误程序
#include <stdio.h>
int main()
{
	int i = 0;
	char str[30] = { 0 };
	printf("请输入字符串:");
	char a = getchar();
	while (a != '\n')
	{
		str[i] = a;
		i++;
	}
	for (int j = 0; j < i; j++)
	{
		putchar(str[j]);
	}
	return 0;
}

>>> gets()与pur()

1.gets()函数原型:

#include <stdio.h>

char *gets( char *buffer );

*** 返回值:成功返回其参数;失败返回NULL

*** 使用 gets() 时,系统会将最后的换行符(\n)从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。

2.puts()函数原型:

#include <stdio.h>

int puts( const char *string );

*** 返回值:成功返回非负值,失败返回EOF

#include <stdio.h>
int main()
{
	char s[20] = {0};
	printf("请输入:");
	gets(s);
	int a = puts(s);
	printf("%d\n", a);
	return 0;
}
//结果:
//请输入:aaa asss
//aaa asss
//0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值