C语言_数组知识(重点输入输出)

本文详细介绍了C语言中字符串的存储、输入输出方法,包括scanf、gets、printf、puts等函数的使用,以及如何处理多维数组和单个字符的输入输出。特别提到了旧版C标准中的安全隐患,并展示了使用getchar和putchar的例子。
摘要由CSDN通过智能技术生成

一.数组的存储

  • 存储字符串必须要有结束标志'\0'
  • 存储字符串的数组长度至少时字符串的有效长度 + 1

输入123

数组长度 = 字符串长度+1.  字符串结束标志\0在输入后自动加上

二.字符串的输入与输出

1.4个输入输出字符串函数的比较

函数格式区别
scanf()scanf("%s", 字符数组名)使用多个格式控制符%s可以输入多个字符串, 遇到空格结束这一次输入. enter键后\r自动转换为 '\0'
gets()gets(字符数组名)只能输入一个字符串, enter键后 \r 转换为\0
printf()printf("%s", 字符数组名)可以输出多个字符串, 不会自动换行,要加\n
puts()puts(字符数组名)只能输出一个字符串,自动换行

                两个s的函数不安全, 所以在新的c标准已经不支持它们了.

2.逐个字符的输入输出    

  • 标准输入输出函数scanf()和printf(),配合%c格式描述符, 循环
  • 必须输入固定个数字符
#include<stdio.h>
int main()
{
	int i; 
	char str[11];
	printf("请输入十个字符:");
	for (i = 0; i < 10; i++)
		scanf("%c", &str[i]);
	str[i] = '\0';
	i = 0;
	while (str[i] != '\0')
	{
		printf("%c", str[i]);
		i++;
	}
	return 0;
}

  • 使用getchar()和putchar()函数输入输出字符串
  • 输入字符个数在规定内即可,当输入回车符时结束
#include<stdio.h>
int main()
{
	int i=0; 
	char str[80];
	printf("请输入一串字符:");
	while ((str[i] = getchar()) != '\n')
		i++;
	str[i] = '\0';
	for (i = 0; str[i] != '\0'; i++)
		printf("%c", str[i]);
	return 0;
}

3.字符串的整体输入输出

        

  • 利用标准输入函数scanf(),配合%s格式描述符
  • 调用格式:scanf(“%s”,字符数组名);
  • 在使用%s格式控制符输入字符串时,scanf()函数会自动在字符串后面加上’\0’
#include<stdio.h>
int main()
{
	char str[10];
	printf("请输入一串字符:");
	scanf("%s", str);//不用& str就是地址
	printf("%s\n", str);
	return 0;
}

需要输入中间含有空格的字符串时,要用具有多个输入参数的scanf()函数配合输入

#include<stdio.h>
int main()
{
	char str1[5],str2[5], str3[5];
	scanf("%s%s%s", str1, str2, str3);
	printf("%s %s %s\n", str1, str2, str3);
	return 0;
}

结果:

how are you
how are you
  • 使用函数gets()输入完整的字符串
  • 调用格式:gets(字符数组名);
  • 该函数可将键盘输入的一行字符以字符串的形式存放到一个字符数组中
  • 输入一行字符时以Enter键作为结束符,且自动将回车符’\n’转换为’\0’,作为字符串的结束标志
    #include<stdio.h>
    int main()
    {
    	char str[50];
    	gets(str);
    	printf("%s\n", str);
    	return 0;
    }
    

    结果:

how are you
how are you

4. 字符串的整体输出

  • 利用标准输出函数printf(),配合%s格式描述符
  • 调用格式:printf(“%s”,字符数组名);
#include<stdio.h>
int main()
{
	char str1[]="How are you?";
	char str2[] = "I am fine.Thank you.";
	printf("%s\n%s\n", str1,str2);
	return 0;
}

结果:

How are you?
I am fine.Thank you.
  • 使用函数puts()输出完整的字符串
  • 调用格式:puts(字符数组名);
  • 该函数可将一个字符串(以’\0’结束的字符序列)输出到屏幕
  • 输出后会自动换行
#include<stdio.h>
int main()
{
	char str[]="How are you?";
	puts(str);
	printf("I am fine.Thank you.");
	return 0;
}

结果:

How are you?
I am fine.Thank you.//可看出换了行

5. 多维数组可以以'行'为单位输出

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	char whichDay[7][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
	int day = 0;

	scanf("%d", &day);

	//合法性判断
	if (day < 1 || day > 7)
	{
		printf("输入错误, 请输入数字1~7\n");
		return 1;
	}

	printf("%s\n", whichDay[day - 1]);

	return 0;
}

输入输出单个字符时, 可以使用getchar() 和putchar()

int a;
a = getchar();// 无参数, 输入一个字符  == scanf("%c", &a);
              //返回读取字符的asc码值;读取失败,返回EOF(-1); 所以变量a要为int
              //也会空白字符, 而scanf遇到空格停止读取
putchar(a);   //有参数, ==printf,输出一个字符
              //返回输出的字符, 否则返回常量EOF.

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值