<C> getchar()函数 以及如何把getchar()到的字符串存起来的实际应用

一.getchar()

1.返回值:返回读到的ASCⅡ码值

2.使用方法:

 1 #include<stdio.h>
 2
 3 int main()
 4 {
 5     char c;
 6     while((c = getchar()) != ‘\n‘)
 7     {
 8         printf("%c",c);
 9     }
10
11     return 0;
12 }

3.功能:从输入缓冲区中读取一个字符 是一个阻塞函数(目前了解就好 后面应该有机会学到这方面的知识)

二.如何把getchar()到的字符串存起来?

1.引入:

我们首先应该思考的问题:“内存申请问题”

我们并不知道所要输入的字符串是多长的 那么我们应该怎么申请这块空间来存这个字符串呢

申请的太大 空间浪费 申请的太小 肯定存不下就是了 这可咋整(突然冒出东北话)

直接定义长度的那种方法就肯定不行了 所以 不妨试试malloc(我觉得ok)

2.假设:现在我要输入1234567890

3.基本思路:

①先申请一个长度为5的空间 把所get到的字符一个一个存进去

当存到倒数第二个空间的时候 而且你还没输完!(警报警报 您的内存已经不够用)

这个时候我们把最后一个空间 存为‘\0‘

把最后一个空间存为‘\0‘的目的是:为了让目前所存的这些字符变成一个字符串(你猜我要拿这个字符串干啥 嘻嘻)

②申请一个更大的空间 比如:长度=长度+5

先把之前的字符串拷贝到这个新的字符串里

然后从‘\0‘的位置继续放get到的字符

以此类推..

4.函数实现:(注释感觉敲重要 你要不要考虑看一下)

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4
 5 char* GetString();
 6
 7 int main()
 8 {
 9     char* p = GetString();
10     printf("%s\n",p);
11
12     return 0;
13 }
14
15 char* GetString()
16 {
17     char c;
18
19     int nSize = 5;
20     //初始长度
21     int nCount = 0;
22     //用来标记存了多少个字符
23
24     char* str = (char*)malloc(sizeof(char)*nSize);
25     //创建一个字符数组 初始长度为5
26     char* pMark = str;
27     //让pMark指针始终指在字符数组的首元素的位置
28     char* newStr = NULL;
29
30     while((c = getchar()) != ‘\n‘) //只要没敲回车 存储就一直进行
31     {
32         *str = c;
33         str ++;
34         nCount ++;
35
36         if(nCount + 1 == nSize) //如果存的元素是内存的倒数第二个空间了
37         {
38             *str = ‘\0‘;
39             //让它变成一个字符串
40             nSize += 5;
41             //空间长度变大
42             newStr = (char*)malloc(sizeof(char)*nSize);
43             //申请一个新的空间
44
45             strcpy_s(newStr,nSize,pMark);
46             //用pMark!!!注意这里一定要用pMark拷贝!!!因为str已经动了 str指的已经不是头了 我打两遍这里都打错了
47
48             free(pMark);
49             pMark = NULL;
50             //释放就不用我说了吧
51
52             str = newStr + nCount;
53             //让str指在拷贝过来的字符串‘\0‘的位置 以便继续存字符
54             pMark = newStr;
55             //重点!!让pMark指在新的字符串头的位置
56         }
57     }
58     //循环往复 直到你敲回车 结束输入
59
60     *str = ‘\0‘;
61     //让它做自己 让它做一个完美的字符数组
62     return pMark;
63 }

PS:敲啊敲 敲啊敲 敲好几遍还是会犯错(跟自己生气气) 熟能生巧吧 码的大脖筋疼

原文地址:https://www.cnblogs.com/Aaaaaalei0612/p/8834487.html

时间: 2024-10-12 10:58:06

<C> getchar()函数 以及如何把getchar()到的字符串存起来的实际应用的相关文章

getch()、getche()和getchar()函数

getch().getche()和getchar()函数(1) getch()和getche()函数  这两个函数都是从键盘上读入一个字符.其调用格式为:  getch();  getche();  两者的区别是:getch()函数不将读入的字符回显在显示屏幕上,而getche() 函数却将读入的字符回显到显示屏幕上.       例1:        #include"stdio.h"       #include"conio.h"       void main

C语言编程之--scanf()函数与getchar()函数搭配来理解C程序的输入缓存(buffer)

博主最近在学习C语言编程,在书中的代码示例中出现了下面的代码段: #include<stdio.h> int main() { char a[5]; int i; printf("请依次输入值:\n"); for(i=0;i<5;i++) { scanf("%c",&a[i]); getchar(); //为什么要加一个getchar()? } printf("\n"); for(i=0;i<5;i++) { pr

c语言:用getchar函数读入两个字符给c1,c2,用putchar和printf输出。思考问题

用getchar函数读入两个字符给c1,c2,分别用putchar和printf输出这两个字符.思考以下问题: (1)变量c1和c2定义为字符型还是整型?或二者皆可? (2)要求输出c1和c2的ASCII码,应如何处理? (3)整形变量和字符变量是否在任何情况下都可以互相代替?char c1, c2;和int  c1, c2;是否无条件等价? 程序: #include<stdio.h> int main() { char c1, c2; printf("请输入两个字符c1,c2:&q

关于getchar函数缓冲区的问题

最近,看到有同学问我关于getchar()这个函数缓冲区的问题,结合我以前的学习,我将对getchar()进行一次总结,当然,这些都是别人已经提过的东西,我只是总结,接下来我们来看看. 首先,用getchar()函数进行字符的输入,并不是直接从键盘这个硬件中读取输入的字符,而是从"输入缓冲区"中得到的字符.输入缓冲区是一个字符的队列,其中存储了所有你尚未读取的字符.每次调用getchar函数,它就会从输入缓冲区中读出第一个字符,并把这个字符从输入缓冲区中清除. 然而,这个输入缓冲区的设

小议getchar()函数

函数原型: int scanf(constchar*format,...); 该函数定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>.它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. 函数 scanf() 是从标准输入流stdio (标准输入设备,一般是键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中. 其调用形式为: scanf("<格式说明字符串>",&

C语言#getchar()函数

1.getchar()的作用 getchar()函数的作用是从缓冲区读入一个字符的数据,第一次读取数据getchar()会等待用户键入ENTER然后开始从缓冲区进行读取数据,如果缓冲区的数据大于1个字节,剩下的数据会暂时存储在缓冲区,getchar会依次进行读取,而不需要用户再次输入ENTER来触发读取. getchar()的返回值是一个整型的数据,其值对应字符的ASCII码. 2.统计输入空格数量的小程序 1 #include<stdio.h> 2 3 main() { 4 5 int n;

DB2常用函数详解(一):字符串函数

VALUE函数 语法:VALUE(EXPRESSION1,EXPRESSION2) VALUE函数是用返回一个非空的值,当其第一个参数非空,直接返回该参数的值,如果第一个参数为空,则返回第一个参数的值. eg: --表示如果T1.ID为空,则返回空串,如果T1.ID不为空,则返回T1.ID. SELECT VALUE(ID,'') FROM T1 COALESCE函数 语法:COALESCE(ARG1,ARG2...) COALESCE返回参数集中第一个非null参数.用法类似于VALUE函数.

JavaScript基本数据类型,函数对象,表,数组,字符串,函数调用

直接上代码了, 1 cc.Class({ 2 extends: cc.Component, 3 4 properties: { 5 6 }, 7 //JS基本数据_函数对象_表_数组_字符串_函数调用 8 onLoad:function () { 9 //基本数据类型 10 //1整数 2 小数 3 逻辑变量真/假 cc.log();进行打印 11 console.log(1); 12 console.log(2.0); 13 console.log(true); 14 15 /*1: var

同时使用scanf()函数和getchar()函数的陷阱

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息. 函数名:getchar 功能:从计算机终端(一般是键盘)输入一个字符. 同时使用者两个函数时,会有陷阱,代码如下: #include <stdio.h> int main(void) { char buff[20],ch; int num,i=0; printf(&quo