在从控制台读取字符的时候,常用的函数有scanf()、 gets()、fgets()这几个函数,那么这几个函数有什么区别和联系呢?
sacnf() 函数用来从键盘读取字符串,下面通过一个简单的例子来看一下它的用法。
#define LEN 20
int main()
{
char str[LEN];
printf("enter a string:\r\n");
scanf("%s",str);
printf("string is:\r\n");
printf("%s",str);
system("pause");
return 0;
}
提示输入一个字符串,然后将输入的字符串打印出来。测试结果如下:
输入的字符串是“abc def”,但是打印出来的字符串是"abc"。由此可见scanf()函数更像一个单词读取函数,当遇到空白字符时,就会自动结束。
这就要求输入的字符串中间不能有空格。
一般scanf()函数和printf()函数一起使用。
gets() 函数也是用来从键盘读取字符串,下面通过一个简单的例子来看一下它的用法。
#define LEN 20
int main()
{
char str[LEN];
puts("enter a string:");
gets(str);
puts("string is:");
puts(str);
system("pause");
return 0;
}
测试结果如下:
输出的字符串和输入的字符串一样,说明gets函数读取字符串的时候中间可以有空格。在输入字符串的时候,按回车键之后,才会打印出输入的字符,说明gets()函数是通过换行符来结束字符串的读取的。
通过观察代码和输出的字符串可以发现,在代码中没有输出换行符,但是打印的字符串自动换行了,说明使用puts()函数输出的时候,自动在字符串的末尾加上的换行符。
一般gets()函数和puts()函数一起使用。
fgets() 函数也是用来从键盘读取字符串,但是它在读取字符串的时候,还需要设置参数。下面通过一个简单的例子来看一下它的用法。
#define LEN 20
int main()
{
char str[LEN];
fputs("enter a string:",stdout);
fgets(str,LEN,stdin);
fputs("string is:",stdout);
fputs(str,stdout);
system("pause");
return 0;
}
输出结果如下:
输出的字符串和输入的字符串一样,说明fgets函数读取字符串的时候中间可以有空格。在输入字符串的时候,按回车键之后,才会打印出输入的字符,说明fgets()函数是通过换行符来结束字符串的读取的。
在代码中没有加入回车换行符,打印出的字符串也没有换行,说明fputs()函数不会自动在字符串后面加入回车换行符。
在读取字符串的时候,fgets()函数里面有三个参数,第一个是要存储的字符串位置,第二是要读取字符串的最大长度。第三个是从哪个设备输入。 stdin 表示标准的输入设备,也就是键盘。stdout表示标准的输出设备,也就是显示器。
通过第三个参数可以看出,fgets函数不仅可以从键盘读取数据,也可以从其他地方读取数据,那么将代码改为从文件中读取数据试试。
#define LEN 20
int main()
{
char str[LEN];
FILE *in;
in = fopen("abc.txt","r");
fputs("read a string:\r\n",stdout);
fgets(str,LEN,in);
fputs("string is:\r\n",stdout);
fputs(str,stdout);
system("pause");
return 0;
}
首先打开一个文本文档,然后使用fgets()函数从打开的文档中读取数据,最后将数据打印出来。
对比输出结果和文本中内容可以看出,从文件中读取字符串也是成功的。 同样也可以从键盘中读取数据,然后写入到文本中去。修改代码如下:
in = fopen("abc.txt","a+");
fputs("read a string:\r\n",stdout);
fgets(str,LEN,stdin);
fputs("string is:\r\n",stdout);
fputs(str,in);
这里通过追加的方式打开记事本,然后读取键盘上的内容,通过fputs函数,写入到记事本中去。
对比输入的字符串和记事本中的内容,可以看出在控制台输入的字符串已经被成功追加到了记事本中。由此可见fgets()和fputs()是一个通用的输入输出函数。不仅仅在控制台可以使用,在其他输入输出设备上也可以使用。
通过上面的例子可以总结出这三个字符输入函数的特点:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_20222919/article/details/121032857
内容来源于网络,如有侵权,请联系作者删除!