linux C++ 如何获得输入流cin里当前的字符个数(包括不可见字符)

linux C++ 如何获得输入流cin里当前的字符个数(包括不可见字符)
非常感谢1楼的回答,
目前我遇到的问题是如何清空输入流cin,在网上也搜到类似
cin.clear();
cin.ignore(100,'\n');
的回答,但不太符合我的要求,

因为,
事先不能确定cin里有没有字符,也不知道里面有多少个'\n',而cin.ignore(100,'\n')只会清空到第一个'\n',这个办法不行,所以想到有没有什么办法知道cin里的字符个数ncount,然后
cin.clear();
streambuf *sbuf = cin.rdbuf();
int ncount = ???
char temp[2048];
sbuf->sgetn(temp,ncount);
来读取ncount个字符,这样就清空了输入流。

streambuf类 有个方法 in_avail();不知道是返回什么个数,反正不是字符个数,我试过了,

对于你提的fread(buf, sizeof(char), 256, stdin);
最后一个参数若是文件fp,则会读取256个字符或是读到文件尾返回,但stdin,和cin是没有eof的,
如果stdin里小于256个字符,那么fread会一直阻塞读,知道你敲够了256个字符,程序才会继续往下执行,

第1个回答  2010-06-04
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
char s[80] = "";
flockfile(stdin);
printf("sleeping...\n");
sleep(5);
printf("please input something.\n");
fgets_unlocked(s, 80, stdin);
gets(s);
printf("you input is [ %s ].\n", s);
return 0;
}

上面的程序我已经测试了,完全符合你的要求,用的方法是阻断当前用户输入,解锁后恢复输入的方法,在阻断区间用户输入被过滤掉

linux C++ 如何获得输入流cin里当前的字符个数(包括不可见字符)
上面的程序我已经测试了,完全符合你的要求,用的方法是阻断当前用户输入,解锁后恢复输入的方法,在阻断区间用户输入被过滤掉

C++ 新手问题 如何知道输入了信息的个数
main(int argc, char *argv[]){ } 获得, argc 是命令行参数个数,参数 argv[0] 是程序名,argv[1],argv[2],..argv[argc-1] 是参数。=== 程序运行中,读入一行参数,可以用gets() 读一行 字符串,然后分析,用 sscanf() 转为数据,完整程序如下。include<stdio.h> int main(){ char...

C++问题 关于cin输入流的问题 如何提取cin的缓冲区的内容呢?
1、按下enter会把之前输入的字符(包括回车符自己)送入到输入缓冲区,但并不会刷新输入流。输入流是C++自己实现的,流的使用也由它管理,C++并没有接收到回车符就刷新输入缓冲流一说。在输入缓冲区的内容被读取完之前(除\\r\\n等),它不会再提示用户作新的输入,所以表面上看起来,用户回车后它的...

C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用 ...
1. **`cin`**:这是C++标准输入流,用于从控制台获取数据。使用`cin`进行输入时,它会自动过滤掉不可见字符,如空格、回车等。例如,基本用法如下:`cin >> 变量名;`用于输入一个数字或字符串,遇到空格、回车等字符会自动结束输入。如果希望不忽略空白字符,可以使用`cin >> noskipws;`。2. **...

c++中cin.get()的具体用法
一、基本用法 `cin.get`是C++中的输入函数,用于从标准输入流获取字符。二、详细解释 1. 获取单个字符:当`cin.get`不带参数时,它会读取并返回下一个字符。例如:cpp char ch;cin.get; \/\/ 从标准输入读取一个字符并存储在变量ch中。2. 获取字符串:当使用带有一个参数的`cin.get`时,可以...

c++如何统计字符串中英文字母、空格、数字的个数?
\\x0d\\x0a\/\/判断字母和数字cctype函数里有专门判断的函数。\\x0d\\x0a#include\\x0d\\x0a#include\\x0d\\x0ausing namespace std;\\x0d\\x0aint main()\\x0d\\x0a{\\x0d\\x0astring a;\\x0d\\x0agetline(cin,a);\\x0d\\x0aint kongge=0;\/\/空格个数\\x0d\\x0aint zimu=0;\/\/字母数字...

统计一个文件中的字符个数,单词个数,行数(用c++)thank you
总不能马上写一个程序给你吧 提供一个思路ifstream input("*.*");sting str;input>>str;\/\/可统计单词数(用循环) 记得要忽略文件流中的空格和换行符 getline(cin,str);\/\/可统计行数 同样要忽略'\\n'

C++中cin.get()的具体用法,是用来得到字符串变量还是得到字符的...
cin.get()是保留回车在输入流队列中的.而cin是丢弃回车的.ch=cin.get();是第一次输入,因为是刚开始,所以没有回车保留在输入流的队列中.这时你输入一个字符,然后回车.get()收到回车或空格或制表符就停止输入了.此时,输入流队列中留下一个回车.num=cin.get();这是第二次输入.因为第一次用了...

...统计其中出现的每一种字符的个数(包括中文字符)
\/\/指向下一个节点};class ChineseCache \/\/中文字符缓存{ private: Chinese* stcCacheHead; \/\/缓存首地址 Chinese* stcCacheCur; \/\/缓存当前的操作位置,一般指向尾部,每次增加一个节点,它也随着移动一个单位 void AddCache(const char* chr1Chinese); public: ChineseCache(); ...

c++中如何控制输入的字符个数
include "stdio.h"int getline(char name[4]){ printf("enter your name:");scanf("%s",name);} int main(){ char name[4];getline(name);if (strlen(name)>4)printf("\\ntoo long");puts(name);return 0;}

相似回答
大家正在搜