C或C++输入缓冲区问题

当需要在控制台上输入多行时,特别是字符时,容易出现缓冲区的问题

如getchar()

getline()

我的解决办法是:在C中刷新下输入缓冲区fflush(stdin)

如下面这个例子:

(1)我需要在一行输入个数n,然后在下面每一行输入一个字符

 1 #include<stdlib.h>
 2 #include<stdio.h>
 3 #include<string.h>
 4
 5 int main()
 6 {
 7     int n;
 8     char str[10];
 9     int i=0;
10     scanf("%d",&n);
11     fflush(stdin);
12     while(n--)
13     {
14         str[i]=getchar();
15         fflush(stdin);
16         i++;
17     }
18     for(int j=0;j<i;j++)
19         printf("%c \n",str[j]);
20
21     system("pause");
22 }

在C++中,当cin>>后要是想再隔行输入getline(cin,str)时,会出现问题,这是因为

在第一次输入时,按下的回车键,还在缓冲区中,被getline给接受了,所以

在这之前可以用cin.ignore( numeric_limits<streamsize>::max(), ‘\n‘);

(2)如下面这个例子:我需要做的是在一行输入个数,然后每一行输入字符串

 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 using namespace std;
 5 int main()
 6 {
 7     string s;
 8     vector<string> str;
 9     int n;
10     cin>>n;
11     cin.ignore(numeric_limits<streamsize>::max(),‘\n‘);
12     while(n--)
13     {
14         getline(cin,s);
15         str.push_back(s);
16     }
17     for(vector<string>::iterator i=str.begin();i!=str.end();i++)
18         cout<<*i<<endl;
19     system("pause");
20 }
时间: 2024-08-04 12:36:50

C或C++输入缓冲区问题的相关文章

scanf()中清除输入缓冲区的几种方法归纳

应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出来用了,这就导致了前面的错误影响到后面的内容,为了隔离这种问题, 总的思想:通过各种方法将输入缓冲区的内容读出来. 方法一:使用scanf("%*[^\n]%*c"):成功; 解释: 1.这里的星号'*'表示读入某类型的内容,但是这个内容不保存到变量里,所以后面不需要对应的参量; 也就是说,只要我再%后面加入星号之后,后没可以不放置接收的变量.

c语言:C语言清空输入缓冲区在标准输入(stdin)情况下的使用

C语言清空输入缓冲区在标准输入(stdin)情况下的使用 程序1: //功能:先输入一个数字,再输入一个字符,输出hello bit #include <stdio.h> int main() { int num = 0; char ch = ' '; scanf("%d", &num); scanf("%c", &ch); printf("hello bit\n"); system("pause"

c++清除输入缓冲区之 sync() vs ignore()

最近在写程序的时候总是不注意输入缓冲区内是否还有东西,导致出现了一些异常,调试了半天.所以来上一贴,学习注意,引以为戒! http://blog.chinaunix.net/uid-21254310-id-1828906.html sync()函数 和ignore()函数都是用于清除输入缓冲区的内容的. #include<unistd.h>    void sync(void)                                                         清除

【学习笔记】关于输入缓冲区。一个不规范的字符赋值语句引发的讨论

1.这种赋值语句是我练习时写的错误代码,它不符合规范,是实际写代码的时候,不应该出现的.只是结果碰巧"正确",因此拿出来讨论. 2.因此这篇笔记对实际代码能力的提升并没有太大帮助. 下面这段代码,4个printf语句的输出结果分别为多少? #include<stdio.h> int main() { char *a = 'abc' ; char b = 'abc' ; printf( "%s\n", &a);      //c printf( &

清空输入缓冲区

/* 清空输入缓冲区 cin.clear():清除错误标记,比如要求输入int型,但我们输入了char型,就会导致输入错误,产生错误标记 cin.sync():清空输入缓冲区 cin.ignore(n,ch): 第一个参数是清空输入缓冲区的大小,第二个参数是终止字符(注:终止字符也会被丢弃),常用形式有以下两种: cin.ignore(1024,'\n') cin.ignore(numeric_limits<streamsize>::max(),'\n') //此时需要包含头文件<lim

C语言清空输入缓冲区的N种方法对比(转)

C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); //获取行系列 char *fgets(char * restrict s, int n, FILE * restrict stream); char *gets(char *s);//可能导致溢出,用fgets代替之. //格式化输入系列 int fscanf(FILE * restrict stream, co

vs2019清空输入缓冲区

发现用cin.sync()在vs2019中不能清空输入缓冲区,以前的vs版本没试过,我看别人在vc中用cin.sync()可以清除,估计是IDE的问题..以下是我学习C++四个多月写的一整段代码 运行结果表明输入缓冲区没有清除掉, 找到问题所在 然后试着把cin.sync()改为cin.ignore(),程序流程正常,没有翻车. 原文地址:https://www.cnblogs.com/YLJ666/p/12305404.html

输入缓冲区的问题1

1 #include <stdio.h> 2 int main(void) 3 { 4 int a; 5 char c; 6 7 scanf("%d", &a); 8 c = getchar(); 9 putchar(c); 10 11 return 0; 12 } 输入1,然后回车 整数1读入到变量a中,回车字符'\n'读入到c中. 原文地址:https://www.cnblogs.com/2018jason/p/12204089.html

关于char类型的连续输入

这个忘了好久了 先回想吧 一 单字符 ①  char m; scanf("%d",&m); ② char m; m=getchar(); putchar(m); 二 字符数组(字符串) ①   char a[10]; int i; for(i=0;i<10;i++){ scanf("%c",&a[i]); } ②   char a[10]; gets(a[10]); puts(a[10]); 书本上的 我今天用的连续输入char o,p,q;