C语言获取键盘输入
C提供的获取键盘输入的常用标准函数有scanf()
、getchar()
、gets()
。
从键盘获取多个字符串
从键盘获取输入的字符串可以使用scanf()
、gets()
、fgets()
、read()
(Linux)、fread()
(windows)。
scanf()
获取键盘输入的字符串时,当读取到空格时,就会结束读取;
gets()可以读取输入的带有空格的字符串,但是gets(0是不安全的,执行读操作时容易发生移除,存在潜在的传冲区溢出问题,在c99
中已经废弃,c11
中已经不支持使用了,使用fgets()
代替。
需要获取多个字符串时,可以使用如下方式。
方式一,使用fgets()
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 获取从键盘输入的数据
char buf[1024] = {0};
printf("请输入数据:");
char *str = fgets(buf, sizeof(buf) - 1, stdin); // fgets()是阻塞的
printf("buf : %s\n", buf);
printf("str : %s\n", str);
printf("len : %ld\n", strlen(buf));
return 0;
}
运行:
请输入数据:hello world
buf : hello world
str : hello world
len : 12
方式2,使用read()
/fread()
。Linux/Unix可以使用read()函数,传入的文件描述符参数设置为STDIN_FIFENO
;windows可以使用fread()
,传入的文件流参数设置为stdin
。
Linux/Unix下:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main()
{
// 获取从键盘输入的数据
printf("请输入数据:\n");
char buf[1024] = {0};
ssize_t size = read(STDIN_FILENO, buf, sizeof(buf));
printf("buf : %s\n", buf);
printf("len : %ld\n", strlen(buf));
printf("return size : %ld\n", size);
return 0;
}
运行:
请输入数据:
hello world
buf : hello world
len : 12
return size : 12
出现的问题,刚开始的代码是
printf("请输入数据:");
没有加换行符,然后程序运行时的结果如下,需要先输入数据,然后才会打印。网上搜索是缓冲区的问题,具体博客:linux下printf函数为什么不加\n就不能输出相关的内容 ?_Alen.Wang的博客-CSDN博客hello world 请输入数据:buf : hello world len : 12 return size : 12
windos平台:
#include <stdio.h>
#include <string.h>
#include <io.h>
#include <stdlib.h>
int main()
{
char buf[1024] = { 0 };
size_t size = fread(buf, 1, 12, stdin);
printf("键入:%s\n", buf);
printf("ret : %d\n", size);
system("pause");
return 0;
}
使用fread()
从键盘读取数据时,需要注意传入的第三个参数,fread()
会把键盘输入的数据存入缓冲区,当输入的数据和传入的第三个参数一样多的时候(空格、tab键也算在内),fread()
才会把缓冲区的数据赋给buf
,并返回键入的字符数。所以不推荐使用该方式从键盘读取数据,除非要键入的数据的字符数固定。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46060.html