600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > C | C语言学习(三)输入数据 输出数据 类型转换 数组 char数组和字符串 字符串长度

C | C语言学习(三)输入数据 输出数据 类型转换 数组 char数组和字符串 字符串长度

时间:2019-09-22 06:30:30

相关推荐

C | C语言学习(三)输入数据 输出数据 类型转换 数组 char数组和字符串 字符串长度

一、从标准输入设备读取数据 (# include <stdio.h>)

1. 读取数据(通用):scanf通过%转义的方式可以得到用户通过标准输入设备输入的数据。

int num1, num2;scanf("%d%d", &num1, &num2);//两个数据之间需要用空格或者回车隔开scanf("%d,%d", &num1, &num2);//两个数据之间需要用,隔开scanf("%3d%d", &num1, &num2);//输入12345回车,num1=123,num2=45

2. 读取char类型数据:getchar是从标准输入设备读取一个char。

3. 读取字符串char *:

char *gets(char *s);从标准输入设备读入字符,并保存到指定的内存空间,直到出现换行符或读到文件结尾为止。

参数:s:与符串首地址;

返回值:成功:读入的字符串;失败: NULL。

4. 读取文件或者读取从键盘输入的字符串:

char *fgets(char *s,int size,FILE *stream);从stream指定的文件内读入字符,保存到 s 所指的内存空间,直到出现换行字符、读到文件结尾或是已读了 size -1 个字符为止,最后会自动加上字符 '\0' 作为字符串结束。

参数:s:字符串

size:指定最大读取字符串的长度 ( size -1 )

stream:文件针,如果读键盘输入的字符串 , 固定写为 stdin

返回值:成功:成功读取的字符串;

读到文件尾或出错:NULL。

★ gets(str) 与 scanf ("%s",str) 、fgets的区别:

gets(str) :允许输入的字符串含有空格,不包含结尾的"\n",存在缓冲区溢出情况。

scanf ("%s",str):不允许含有空格,不包含结尾的"\n",存在缓冲区溢出情况。

fgets():允许含有空格,(输入个数少于元素个数时)会包含结尾的"\n",并会自动加上字符 '\0' 作为字符串结束,不存在缓冲区溢出情况。

由于 scanf( )和 gets( )无法知道字符串str大小,必须遇到换行符或读到文件结尾为止才接收输入,因此容易导致字符数组越界 ( 缓冲区溢出 ) 的情况。所以我们在定义字符数组时要把数组长度设置的尽可能大。

fgets ( ) 在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。通过 scanf 和 gets 输入一个字符串的时候,不包含结尾的"\n",但通过 fgets 结尾多了"\n"。 fgets ( ) 函数是安全的,不存在缓冲区溢出的问题。

# include <stdio.h>#pragma warning(disable:4996)int main(){char ch[20];gets(ch);//输入:hello world回车printf("%s", ch);//输出:hello worldscanf("%s", ch);//输入:hello world回车printf("%s", ch);//输出:hello}

char ch[20];fgets(ch, sizeof(ch), stdin);//输入:hello world回车printf("%s", ch);//输出:hello world回车char ch1[10];fgets(ch1, sizeof(ch1), stdin);//输入:hello world回车printf("%s", ch1);//输出:hello wor

二、输出数据 (# include <stdio.h>)

1. 输出数据(通用):printf通过%转义的方式可以输出数据。

2. 输出char类型数据:putchar可以输出一个char类型数据,参数可以是char类型变量、char字符、整型。结果不会换行。

char c = 'a';putchar(c);//aputchar('\n');//换行putchar('a');//aputchar('\n');//换行putchar(97);//a

3. 输出字符串:

int puts(const char *s);

功能:标设备输出字符串,在输出完成后动输出一个"\n"

参数:s:字符串首地址

返回值:

成功:非负数;

失败: -1。

char ch[20] = "hello world";puts(ch);//输出hello world换行char ch1[20];fgets(ch1, sizeof(ch1), stdin);//输入:hello world回车puts(ch1);//输出hello world换行换行puts("");//输出换行

4. 将字符串写入到 stream 指的文件中,字符串结束符 " 0' 不写入文件;或者把字符串输出到屏幕上。

int fputs(const char *str,FILE *stream);

参数:str:字符串

stream:文件指针,如果把字符串输出到屏幕 , 固定写为stdout

返回值:

成功: 0

失败:-1

fputs()是 puts()的文件操作版本,但 fputs()不会自动输出一个"\n"

三、类型转换

类型转换的原则:占用内存字节数少 ( 值域小 ) 的类型,向占用内存字节数多(值域大 ) 的类型转换,以保证精度不降低。

四、数组

1. 获取一维数组元素个数:

int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int length = sizeof(arr) / sizeof(arr[0]);

2. 获取二维数组行列数:

int arr[][3] = {{1,2,3},{4,5,6}};int row = sizeof(arr) / sizeof(arr[0]);//行数int col= sizeof(arr[0]) / sizeof(arr[0][0]);//列数printf("行:%d\n列:%d", row, col);

五、char数组和字符串

C语言中没有字符串这种数据类型,可以通过 char数组来替代。字符串一定是一个 char 数组,但 char数组未必是字符串 。数字0(和字符 '\0' 等价)结尾的 char 数组就是一个字符串,但如果 char数组没有以数字 0 结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的 char 的数组。

char ch[] = { 97,98,99,100,0,101 };//6个元素,第五个元素是结束标志\0printf("%s", ch);//输出abcdchar *ch1 = "hello";//注意有结束标志\0printf("%s", ch1);//输出hellochar ch2[] = "hello";//6个元素,注意有结束标志\0printf("%s", ch2);//输出hellochar ch3[] = { 97,98,99,100,101 };//5个元素printf("%s", ch3);//输出abcde及一堆乱码,因为没有结束标志char ch4[10] = { 97,98,99,100,101};//10个元素printf("%s", ch4);//输出abcdechar ch5[10] = { 97,98,99,100,101,102,103,104,105,106 };//10个元素printf("%s", ch5);//输出abcdefghij及一堆乱码

六、计算字符串长度 (#include <string.h>)

size_t strlen(const char *s);

功能:计算指定字符串的长度 , 不包含字符中结束符"\0"

参数:s:字符串首地址

返回值:字符串的长度,size_t 为 unsigned int 型

char ch[100] = "hello world";printf("char数组所占字节大小:%d\n", sizeof(ch));//100printf("字符串长度:%d\n", strlen(ch));//11char ch1[] = "hello world";printf("char数组所占字节大小:%d\n", sizeof(ch1));//12,包含\0printf("字符串长度:%d\n", strlen(ch1));//11

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。