输入字符串c++语言,c++输入输出字符串
Yyds干货库存
Input如果要将一个字符串读入程序,必须先预留存储该字符串的空间,然后使用input函数获取该字符串。C库提供了三个读取字符串的函数:scanf()、gets()和fgets()。
创建存储空间,可以通过数组(char name[10])来分配存储空间,也可以通过C语言的动态内存分配函数来动态分配存储空间。
char * name
scanf(%s ,名称);
如果用上面的代码来创建存储空间,可能会被编译器使用,但是在读入名字的时候,名字会覆盖程序中的数据和代码,可能会导致程序异常终止。这是因为scanf()将信息复制到由name指定的地址。在这种情况下,参数是一个未初始化的指针,name可以指向任何地方。
获取()函数
get () (getstring)函数对于交互式程序来说非常方便。它从系统的标准输入设备(通常是键盘)获取一个字符串。由于字符串没有预先确定的长度,gets()函数通过判断遇到的第一个换行符(\n)来结束输入,按回车键可以生成这个字符。它读取换行符之前(不包括)的所有字符,并在它们之后添加一个空白字符(\0)。
[clef@rhel6164 c]$ cat test1.c
#包含stdio.h
#定义最大值81
int main(void)
char name[MAX];
char * ptr//指向字符的指针
printf(请输入您的姓名。\ n’);
ptr=gets(name);//使用地址栏将字符串分配给name
//gets()函数使用return关键字返回字符串的地址。
printf(name,%s\n ,name);
printf(ptr,%s\n ,ptr);
返回0;
}
运行:
[clef@rhel6164 c]$ gcc test1.c
/tmp/ccDJ9AHw.o:在函数“main”中:
//因为gets()函数不检查存储区是否能容纳实际输入的数据,所以可以用下面的fgets()函数代替gets()函数。
test1.c:(。text0x1a):警告:gets函数很危险,不应使用。
[clef@rhel6164 c]$。/a . output请输入您的姓名clefname,clef
//这里ptr和name的内容是同一个ptr,clef
如果gets()函数在读取字符串时出错或遇到文件结尾,它将返回一个空(或0)地址。这个空地址称为空指针,由stdio.h中定义的常量NULL表示。下面的代码可用于一些错误检测。
while(get(name)!=空)
上面的错误检测也可以通过getchar函数来完成。
while((ch=getchar())!=EOF)
注意:空指针不同于空字符,所以不要混淆。空指针是地址,而空字符是char类型的数据对象,其值为0。数字都可以用0来表示,但概念不同:null是指针,而0是char类型的常数。
Fgets()函数
因为gets()函数不检查存储区是否能容纳实际输入的数据,多余的字符只是简单地溢出到相邻的内存区,所以上面的代码在编译时会有警告。fgets()函数和gets()函数的区别:
它需要第二个参数来解释读入的最大字符数。如果该参数的值为n,fgets()将读取最多n-1个字符或一个换行符(因为会自动添加一个空白字符(\n),输入将由两者中的第一个完成。
如果fgets()读取一个新行,它将被存储在字符串中,而不是像gets()那样被丢弃。
它还需要第三个参数来解释要读取哪个文件。从键盘读取数据时,可以使用stdin(标准输入)作为参数。这个标识符在stdio.h中定义
[clef@rhel6164 c]$ cat test1.c
#包含stdio.h
#定义最大值81
int main(void)
char name[MAX];
char * ptr
printf(请输入您的姓名。\ n’);
ptr=fgets(name,MAX,stdin);
printf(name,%s\n ,name);
printf(ptr,%s\n ,ptr);
返回0;
}
运行:
[clef@rhel6164 c]$ gcc test1.c //这里没有警告。
[clef@rhel6164 c]$。/a.out
请输入您的姓名。
名字,谱号
//注意这里的换行符,因为fgets()函数不会丢弃输入的换行符。
谱号ptr
[clef@rhel6164 c]$
Scanf()函数
scanf()函数可以使用%s格式读入字符串。scanf()函数和gets()函数的主要区别在于如何决定字符串何时结束。scanf()函数更多的是基于获取单词(get word)而不是获取字符串(get string)。scanf()函数有两种方法来确定输入的结束,其中任何一种都是遇到的第一个非空白字符的开始。
如果使用%s格式,字符串读取(但不包括)下一个空白字符(如空格、制表符或换行符)。
如果指定了字段宽度,比如s,scanf()函数将读取10个字符,或者直到遇到第一个空白字符,输入将被第一个字符终止。
字符串输出
c有三个输出字符串的标准库函数:puts()、fputs()和printf()
Puts()函数
puts()函数很容易使用。它只需要给出字符串参数的地址,遇到空字符(\0)就会结束输出(所以肯定有空字符)。当puts()函数显示一个字符串时,它会自动在其后添加一个换行符(\n)。
[clef@rhel6164 c]$ cat test1.c
#包含stdio.h
#define DEF 我是一个#defined字符串。
int main(void)
char str1[80]=一个数组被初始化为me。;
const char * str2=一个指针对我进行了初始化。;
puts(我是puts()的参数。);//直接将字符串作为参数
卖出(DEF);//使用宏定义作为参数
看跌期权(str 1);
看跌期权(str 2);
puts((str 1[5]);//必须用中括号strl1[5],因为str1会先合并,再在[5]处合并,会出错。
看跌期权(str 2 4);
返回0;
}
编译执行:
[clef@rhel6164 c]$ gcc。/test1.c
[clef@rhel6164 c]$。/a.out
我是看跌期权的论据()。
我是一个#定义的字符串。
我初始化了一个数组。
一个指针对我进行了初始化。
雷对我初始化了。
我开始对兴趣产生了兴趣。
函数的作用是
函数的作用是:puts()函数面向文件版本。两者之间的主要区别是:
fputs()函数需要第二个参数来描述要写入的文件,stdout(标准输出)可以用作输出显示的参数。
与puts()函数不同,fputs()函数不会自动在输出中添加换行符。
读一行,回显到下一行,可以通过下面两个循环来完成。
充电线[81];
While(gets(line)) //当到达文件末尾时,gets()函数将返回一个空指针,循环结束。
放(线);
充电线[81];
while(fgets(line,81,stdin))
fputs(line,stdout);
Printf()函数
和puts()函数一样,printf()函数在输出一个字符串时也需要一个字符串地址作为参数,但是printf()函数没有puts()函数方便,但是可以格式化多种数据类型,而且输出时不会自动加一个换行符。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。