C/C++中如何读取一个带空格的字符串

转载链接:https://blog.csdn.net/henu1710252658/article/details/80173846

一、C中(用scanf读入一个带空格的字符串)

样例:

#include <stdio.h>
int main(){
    char s[100];
    scanf( "%[^\n]", s ); //注意:连用时一定要加上 getchar() 吸收换行符
    printf( "%s\n", s );
//  printf("%c\n", s[2] );
    return 0;
}

定制自己的扫描集 %[abc]、%[a-z]、%[^abc]、%[^a-z]。[ ]内是匹配的字符,^表示求反集

 

二、C中(gets函数)

可以无限读取,以回车结束读取。 
gets()函数从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。gets()函数并不读取换行符’\n’,它会吧换行符替换成空字符’\0’,作为c语言字符串结束的标志。 
gets()函数经常和puts()函数配对使用,puts()函数用于显示字符串,并自动在字符串后面添加一个换行标志’\n’ 
但是不推荐使用因为gets(s),(s为一个字符串)。gets没有指明读取的最大字符数。这里就会出现一个潜在的问题:gets将不停的往s中储存内容,而不管是否存储的下!gets函数不会管s的可用空间有多少。如果输入的字符串过长,会导致缓冲区溢出(buffer overflow),即多余的字符超出了指定的目标空间。gets()函数就会访问未被分配的内存空间,如果这些内存未被使用,不会立即出现问题;如果这片空间已经存有数据,就会擦除掉程序中的其他数据,会导致程序中止。 
在C11标准里,gets函数已经被正式删除了。

 

三、C中(fgets函数)

gets与gets互为兄弟。 
fgets(char buf, int bufsize, FILE stream ):。注意第二个参数bufsize,这个参数就限制了读取的字符的个数,这就可以解决gets()函数的缺陷。我们知道fgets() 函数主要用于读取文件,如果要读取键盘,则stream参数应该为stdin。需要注意的是,如果bufsize设置为n,那么fgets()函数最多读取n-1个字符,之所以用“最多”这个词是因为,如果在之前遇到了换行符”\n”,fgets函数也会返回,读取工作将会停止,而这个”\n”也会是buf字符串中最后一个有效字符(再往后就是字符串结束符”\0”了 ),只有在一种情况下,buf不会以”\n”结尾:读到文件结束符,并且文件的最后一个不是以”\n”结尾。还有就是,fgets()函数会读取换行符(这一点和gets函数不同),当读取结束后,fgets函数会为buf在末尾添加一个空字符作为字符串的结束。 
当一个字符都没有读到时,fgets函数返回NULL。

 

四、C中(fgetc函数)

getc(fin),他会读取一个打开的文件fin,读取一个字符,然后返回一个int值。为什么返回的是int而不是char呢?因为如果文件结束,fgetc将返回一个特殊标记EOF,它并不是一个char。如果把fgetc(fin)的返回值强制转换为char,将无法把特殊值的EOF和普通字符区分开。如果要从标准输入读取一个字符,可以用getchar,它等价于fget(stdin)。 
使用fgetc(fin)可以从打开的文件fin中读取一个字符。一般情况下应当再检查它不是EOF后再将其转化成char值,从标准输入读取一个字符可以用getchar,他等价于fgetc(stdin)。 
fgetc和getchar将读取“下一个字符”,因此需要知道在各种情况下,“下一个字符”是哪个。如果用“scanf()”读取整数,则要是再输入后多加了一个空格,用getchar读取到的将是这个空格;如果在输入之后紧跟着换行,则读取到的是回车符“\n”。

 

五、C++中(getline函数)

string类中的getline函数简单基本用法。

#include <iostream>
#include <string>
using namespace std;
int main()
{
     string a;
     getline(cin,a);
     cout<<a<<endl;
     return 0;
}

string类中的getline函数高级用法。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string a;
    char s='0';
    getline(cin,a,s);
    cout<<a<<endl;
    return 0;
}

此时,getline函数只会读取自己定义的字符s之前的字符,读取到s就停止读取了。

在char数组下也可以使用getline()函数简单用。

#include <iostream>
#include <string>
using namespace std;
int main()
{
     char a[100];
     cin.getline(a,sizeof(a));
     cout<<a<<endl;
     return 0;
}

cin.get()的用法同上。

  • 14
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
单片微型计算机(MCU)经过多年的发展,在性能上有很大的进步,在型号上发展到上千种类,已经广泛应用于人类社会生活的各个领域。单片机课程已经成为高校计算机、自动化、测控以及电子信息工程等专业的重要课程。该课程是一门理论性和实践性都很强的课程,在实际教学,应将理论教学和实验教学紧密结合。学生在掌握理论知识之余,必须通过编写程序、设计硬件电路、仿真、调试这一系列的实验过程,才能更好地掌握单片机的结构原理和应用技能。随着单片机及其接口技术的飞速发展,目前市场上供应的编程仿真实验资源并不能完全满足高校单片机课程教与学的需求,构建低成本、技术先进、源码公开的单片机编程仿真实验系统,对我国单片机课程的教学和单片机领域人才的培养具有重要的现实意义。 本论文结合目前教学对单片机编程仿真实验系统的实际需求,采用模块化结构设计思想,精心设计和开发了单片机编程仿真实验系统。该单片机编程仿真实验系统由PC机端单片机编程控制软件和单片机编程仿真实验板两部分组成。PC机端的单片机编程控制软件可以自动检测到连接到单片机编程仿真实验板上的单片机,控制单片机编程器擦除、写入、读出、校验目标单片机ROM的程序,以十六进制文件(.HEX文件)格式显示在控制界面内;单片机仿真实验系统能够把写入单片机的程序实时地运行,并呈现实际运行效果。单片机编程控制软件和单片机仿真实验板组成一个完整的单片机编程仿真实验系统。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值