有关c++中getline的问题

做了一个简单的学生成绩统计的小程序,储存学生信息并输出最高与最低成绩,
但是输入时候总是自动跳过cin,这是为什么
#include
#include
using namespace std;
struct node
{
string name;
int id;
int grade;
}a[10];
int main()
{
int n;
cin>>n;
for(int i=0;i {
getline(cin,a[i].name);
cin>>a[i].id;
cin>>a[i].grade;
}
int max=0;
int min=0;
for(int i=1;i {
if(a[max].grade if(a[min].grade>a[i].grade) min=i;
}
cout<<a[max].name<<" "<<a[max].grade<<endl;
cout<<a[min].name<<" "<<a[min].grade;
}

7个回答

int main()
{
int n;
cin >> n;
string temp;
for (int i = 0; i {
cin.ignore();;//忽略回车
getline(cin, a[i].name);
cin >> a[i].id;
cin >> a[i].grade;
}

}

终其原因就是因为getline函数把上次出入n之后的空格当做输入了,2楼3楼方法都可以

getline(cin,String)这个规定第二个参数就一定要是String类型,如果要用char数组,改成
cin.getline(字符指针(char*),字符个数N(int),结束符(char));
此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为'\n'。

加上一行getline忽视掉回车键就好了:

 int main()
{
    int n;
    cin >> n;
    string temp;
    for (int i = 0; i<n;i++)
    {
        getline(cin, temp);//忽略回车
        getline(cin, a[i].name);
        cin >> a[i].id;
        cin >> a[i].grade;
    }

}

cin.ignore();

打错字了,是把输入n之后的回车符当做输入行了

    int n;
    cin>>n;
    for(int i=0;i {
        getchar();
        getline(cin,a[i].name);
        cin>>a[i].id;
        cin>>a[i].grade;
    }

其实很多针对char*的库函数是不支持string参数的,
不过getline的输入流恰好以cin的新标准运作,,
缓存区读入整形类型后如果单独成行,就会遗留\n霸占当前行
另外getline和非字符串类型交互输入都是搭配getchar()等使用的

直接用cin是不是会好一点???比较方便。不会出错。可以输入一行(自行解析),也可以输入多行。

  int n;
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>a[i].name;
        cin>>a[i].id;
        cin>>a[i].grade;
    }
    还有就是可以直接写成
    int n;
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>a[i].name>>a[i].id>>a[i].grade;
    }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
有关c++中getline的问题
做了一个简单的学生成绩统计的小程序,储存学生信息并输出最高与最低成绩,n但是输入时候总是自动跳过cin,这是为什么n#includen#includenusing namespace std;nstruct nodenn string name;n int id;n int grade;na[10];nint main()nn int n;n cin>>n;n for(int i=0;i>a[i].id;n cin>>a[i].grade;n n int max=0;n int min=0;n for(int i=1;ia[i].grade) min=i; n n cout<
有关getline()的问题
#includernusing namespace std;rnrnint main()rnrn char stringOne[256];rn char stringTwo[256];rn char stringThree[256];rnrn cout << "Enter string one: ";rn cin.getline(stringOne,256);rn cout << "stringOne: " << stringOne << endl;rnrn cout << "Enter string two: ";rn cin >> stringTwo;rn cout << "stringTwo: " << stringTwo << endl;rnrn cout << "Enter sting three: ";rn cin.getline(stringThree,256);rn cout << "stringTree: " << stringTh bree << endl;rn return 0;rnrn程序输出为:rnEnter string one: one two three rnstringOne: one two threernEnter string two: four five sixrnstingTwo: four //此处为什么只输出了“four” ?rnEnter string three: stringThree: five six //rnrnrn所谓的 getline丢弃换行符是什么意思?
有关函数getline( )的问题
在以下语句执行时:string str; getline(cin,str);rnrn输入一字符串后,为什么要按两次回车才能显示所输入的内容?rn
有关getline输入空格的问题
//while.cpp--introducing the while looprn#includernconst int Arsize=20;rnint main()rn rn using namespace std;rn char name[Arsize];rn cout<<"Your first name,please: ";rn cin.getline(name,20);rn cout<<"Here is your name,verticallized and ASCIIized:\n";rn int i=0;rn while(name[i]!='\0')rn rn cout<>则碰到空格时会跳出,这是为什么?
ifstream 中的getline的问题
[code=C/C++]rn#include rn#include rnusing namespace std;rnrnint main() rnrn const char *InFile="D:\\InData.txt";rnrn ifstream in(InFile,ifstream::in);rn if(!in)rn rn cerr<<"Open file "<
getline中的ctrl+z的问题
#include #include using namespace std; int main() { string world; while (getline(cin, world)) cout << world << endl; system("pause"); return 0; } getine(cin,s)是将cin中的一行(以回车换行为结束标志)赋给s,返回cin
c++#include中getline的问题
[code=C/C++][/code]rn#includern#include rnusing namespace std; rnifstream cin("work3.in",ios::in);rnofstream cout("work.out",ios::out);rnvoid do1(char f[],char m[])rnrn int n=strlen(m);rn if(n==1)cout<0)rn rn for(j=0;j
VC.net中的getline问题
在VC.net 2003版中使用getline读文件,碰到一个很怪的问题:debug调试正常,但是在生成exe文件运行时,就不好使了,getline不能读文件,文件是同一个文件,同一个位置,什么也没改变,不知道为什么。是不是VC.net的问题啊?还是getline的问题?
GetLine,LineLength 有关文本长度的问题
[code=c] for (i=0;i < nLineCount;i++)rn rn m_CtrlTxtAnswerIn.GetLine(i, strText.GetBuffer(m_CtrlTxtAnswerIn.LineLength(i)));rn strText.ReleaseBuffer();rn[/code]rn-----------------rn8,S,d,1rn9,S,a,1rn10,S,b,1rn--------------------rn上边这三行,如果只读第一,二行是可以的。但是一读第三行就不行了。就崩溃了。rnrn应该是文本长度的问题了,百度了下,还是没看懂。rnrn这个要怎么处理呢?
C语言getline函数
cin.getline(字符数组(或字符指针), 字符个数n, 终止标志字符)1、用getline函数从输入流读字符时,遇到终止标志字符时结束,指针移到该终止标志字符之后,下一个getline函数将从该终止标志的下一个字符开始接着读入。2、 如果在用cin.getline(ch, 20, '/')从输入流读取数据时,遇到回车键(&quot;\n&quot;),是否 结束读取?结论是此时&quot;\n&quot;不是结束标志&quot;\n&quot;被作...
【C】getline()函数实现
getline()函数是一个非常常用的函数,下面是它的实现代码:int getline(char s[],int lim) { int c,i; //注意,因为getchar()函数返回值为int型,因此c声明为int型 for(i=0;i<lim-1 && (c=getchar())!=EOF && c!='\n';++i) s[i] = c; if
[C语言]getline用法
首先贴一下百度百科的解释: getline不是C库函数,而是C++库函数。它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。 使用举例: int main() { string line: while(getline(cin,line)) cout&lt;
getline的问题
本人菜鸟,发现程序运行并未按照编写代码的意图,即:输入quotation,回车一次,窗口提示输入speaker,然后键入speaker,回车,窗口显示输入的全部内容。 程序执行时,输入quotation之后,要回车两次才出现下一行提示;且程序直接执行到最后。。。。。。。rn我那行代码cin.get();没有作用了 反复改动过发现是getline的问题 请各位大神明示~~rn[code=C/C++][/code]rn#include rnrn#include rnrnusing namespace std;rnrnint main()rnrn //declaring the necessary variables rn string quote, speaker;rn rn //prompt user for quotationrn cout << " please enter the quotation:\n";rn getline(cin, quote);rnrn //promt user for the quote's authorrn cout << "enter the person to whom this quote is atrributed:\n";rn getline(cin, speaker);rn rn cout << "\n\n";rnrn cout << "press enter or return to continue.\n";rn cin.get();rnrn return 0;rnrnrn
getline 问题?
//输入两个字符串,然后比较大小rn//当我输入两个字符串后,永远是显示 string>(空格)rn/好像没有接收到 string2rn#includern#includernusing namespace std;rnint main()rnrn string string1,string2;rn cout<<"please input two strings ended with (quit) "//以quit 结束rn <string2)rn cout<"<
getline问题
[code=C/C++]#includern#include"person.h"rn#includern#includernusing namespace std;rnint main()rnrn string name,phone;rn vector note;rn bool input=true;rn while(input)rn rn cout<<"Please input name and phone:"<>key;rn cout<::iterator i=note.begin();i!=note.end();i++)rn rn cout<<"The man:"<<(*i)->getName()<<"\tThe phone:"<<(*i)->getPhoneNum()<
getline()的问题
#include rn#include rnusing namespace std;rnint main()rnrn string s;rn while(1)rn rn getline(cin,s);rn s[0]=s[0]-32;rn for (string::size_type i=1;i!=s.size();i++)rn if (s[i-1]==' '&&s[i]!=' ')rn s[i]=s[i]-32; rn cout<
getline()的问题
我用while加getline()循环从一个文件里一行一行读入,每行是以‘\n’定义结束的,可是当读入文件要是最后一行是一个空行,就是什么都没有的情况下界getline就没办法检查是否结束,请问怎样让getline()读到文件结尾终止,因为这个函数的第一个parameter可以是一个ifstream的对象,有没有办法判断这个对象是否不能再输出或者判断是否为空的办法?
getline()问题
[code=C/C++]#include rn#include rnusing namespace std;rnint main()rnrn string str;rn getline(cin,str); rn cout<
在getline中重复使用ifstream的问题
void myread(ifstream *in)rnrn in->seekg(0);rn in->clear();rnrn string s;rn while(getline(*in,s,'\n'))rn rn ...rn rnrn当ifstream打开文件后,第一次调用myread时,可以正常读出文件内容,但以后再调用myread就什么也读不出了。不知道问题出在哪里?
c++中的getline函数的问题
#includern#includern#includernusing namespace std;rnint main ()rnstring name1; rnstring name2; rncout<<"Enter your first name: "<
awk 中 system 的 getline 问题
在 centos6 中,执行如下两条命令rniostat -xm 1 | awk ' "grep eth /proc/net/dev" | getline v;print NR,"...",v 'rnrniostat -xm 1 | awk ' [color=#FF0000]system[/color]("grep eth /proc/net/dev") | getline v;print NR,"....",v 'rn它们的区别在于有否使用 system,仔细观察输出就可以看出不同rn第一种方式,得到的数据是固定不变的,也就是首次执行 grep eth /proc/net/dev 的结果rn第二种方式,可以获取到实时的 grep eth /proc/net/dev ,但要命的是这个结果不输出到变量中(可以看到 print 输出 ... 后面没有数据),会看到一次错误输出rnsh: 0: command not foundrn(网上搜索到的第2种方式,有贴出结果的都有这毛病,但愕然没有人注意)rnrn现在的需求是要在 awk 中捕获 system 的输出,不知道有没有正确的处理方法rn
c++中getline的问题 求教
#include n#include n#include nint main()nn using namespace std;n char charr[20];n string str;nn cout << "Length of string in charr befor input: "n << strlen(charr) << endl;n cout << "Length of string in str befor input: "n << str.size() << endl;n cout << "Enter a line of text:\n";n cin.getline(charr,20);n cout << "You enter : " << charr << endl;n cout << "Enter another line of text:\n";n getline(cin,str);n cout << "You enter: " << str << endl;n cout << "Length of string in charr after input: "n << strlen(charr) << endl;n cout << "Length of string in str after input: "n << str.size() << endl;n return 0;nnnn为什么到了 getline(cin,str);那一行的时候要按下两次回车?
有关c中指针问题
请问c语言中如果一指针非NULL,有地址值,但不能正确获取指针的值,此时如何屏蔽掉,rn在c++中可以捕捉异常进行处理掉。感谢先!
C中有关数组的问题
1.数组的定义rn下面哪个定义是合法的?rna.int a[]="string" b.int a[5]=0,1,2,3,4,5rnc.char a="string" d.char a[]=0,1,2,3,4,5rnrn2.char x="abcdefg"跟char y='a','b','c','d','e','f,'g'有什么区别?后者的长度应该怎样计算?
有关C中的字符串问题?
各位好:rn 在c中,把一个字符串写到文件中后,再次读出与原来是否一个样?如果不一样如何消除这种差异?请高手指点!
有关C中数据类型的问题
在C的编译器中的_G_config.h中有这样一句__extension__ typedef unsigned long long _G_ullong;rn其中的long long上类型?? 怎么书上没介绍过这种类型 高手帮忙给解答一下这句话是什么意思rn该文件的代码如下:rn/* AUTOMATICALLY GENERATED; DO NOT EDIT! */ rn#ifndef _G_config_hrn#define _G_config_hrn#define _G_LIB_VERSION "2.8.0"rn#define _G_NAMES_HAVE_UNDERSCORE 1rn#define _G_VTABLE_LABEL_HAS_LENGTH 1rn#define _G_VTABLE_LABEL_PREFIX "___vt_"rn#define _G_USING_THUNKSrn#define _G_VTABLE_LABEL_PREFIX_ID __vt_rn#define _G_HAVE_ST_BLKSIZE 0rnrn#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)rntypedef int _G_int8_t __attribute__((__mode__(__QI__)));rntypedef unsigned int _G_uint8_t __attribute__((__mode__(__QI__)));rntypedef int _G_int16_t __attribute__((__mode__(__HI__)));rntypedef unsigned int _G_uint16_t __attribute__((__mode__(__HI__)));rntypedef int _G_int32_t __attribute__((__mode__(__SI__)));rntypedef unsigned int _G_uint32_t __attribute__((__mode__(__SI__)));rntypedef int _G_int64_t __attribute__((__mode__(__DI__)));rntypedef unsigned int _G_uint64_t __attribute__((__mode__(__DI__)));rn#if __GNUC__ > 2 || __GNUC_MINOR__ >= 8rn__extension__ typedef long long _G_llong;rn__extension__ typedef unsigned long long _G_ullong;rn#endifrn#elserntypedef short /* deduced */ _G_int16_t;rntypedef unsigned short /* deduced */ _G_uint16_t;rntypedef long /* deduced */ _G_int32_t;rntypedef unsigned long /* deduced */ _G_uint32_t;rn#endifrnrntypedef long _G_clock_t;rntypedef unsigned int _G_dev_t;rntypedef _G_llong _G_fpos_t;rntypedef int /* default */ _G_gid_t;rntypedef short _G_ino_t;rntypedef unsigned short _G_mode_t;rntypedef int /* default */ _G_nlink_t;rntypedef long _G_off_t;rntypedef int _G_pid_t;rn#ifndef __PTRDIFF_TYPE__rn#define __PTRDIFF_TYPE__ intrn#endifrntypedef __PTRDIFF_TYPE__ _G_ptrdiff_t;rntypedef int _G_sigset_t;rn#ifndef __SIZE_TYPE__rn#define __SIZE_TYPE__ unsigned intrn#endifrntypedef __SIZE_TYPE__ _G_size_t;rntypedef long _G_time_t;rntypedef int /* default */ _G_uid_t;rntypedef short unsigned int _G_wchar_t;rnrn#define _G_BUFSIZ 512rn#define _G_FOPEN_MAX (20)rn#define _G_FILENAME_MAX (260)rn#if defined (__cplusplus) || defined (__STDC__)rn#define _G_ARGS(ARGLIST) ARGLISTrn#elsern#define _G_ARGS(ARGLIST) ()rn#endifrn#if !defined (__GNUG__) || defined (__STRICT_ANSI__)rn#define _G_NO_NRVrn#endifrn#if !defined (__GNUG__)rn#define _G_NO_EXTERN_TEMPLATESrn#endifrntypedef int /* default */ _G_ssize_t;rntypedef unsigned int _G_wint_t;rntypedef char * _G_va_list;rn#define _G_signal_return_type voidrn#define _G_sprintf_return_type intrn#define _G_HAVE_ATEXIT 1rn#define _G_HAVE_SYS_RESOURCE 0rn#define _G_HAVE_SYS_TIMES 0rn#define _G_HAVE_SYS_SOCKET 0rn#define _G_HAVE_SYS_CDEFS 0rn#define _G_HAVE_SYS_WAIT 0rn#define _G_HAVE_UNISTD 1rn#define _G_HAVE_DIRENT 1rn#define _G_HAVE_CURSES 0rn#define _G_MATH_H_INLINES 0rn#define _G_HAVE_BOOL 1rn#define _G_HAVE_PRINTF_FP 0rn#define _G_HAVE_LONG_DOUBLE_IO 0rn#undef NULLrn#define __need_NULLrn#include rn#endif /* !_G_config_h */
getline
#includern#includern#includernusing namespace std;rnrnint main()rnrn string name="aaaaa";rn char fullname[10]="bbbbb";rn cout<
getline()
getline(cin,str,'\n')rn要连续两个回车才能录入rn怎么能够一个回车就录入?用string类型str.......
c语言实现getline函数
getline函数可以获取文件中的一行数据。原函数形式为 ssize_t getline(char **linepter,size_t *n,FILE *stream)返回类型ssize_t为有符号整形,其值为获取的字符数,文件结束则返回-1,包括换行符’\n’,但不包括字符串结束符’\0’。linepter用来存储获得的字符串,size_t为无符号整形表示linepter的字节数。当*linep
C/C ++中有关指针与内存分配问题
电脑的内存地址是在什么时候分配的:在硬件上,还是操作系统,还是程序设计编译器..rn内存地址总是在变得么???
getline c分格和c++风格
#include using namespace std; #include int main() { string str; char buf[20]; cout << "input a line" << endl; getline(cin, str); cout << "str=" << str << endl; cout << "input a line <20" <<
C++中getline中的一个奇葩问题
1.如下程序运行 include #include using namespace std; int main() { string line; for(int i=0;i<2;i++){ getline(cin,line); cout<<line<<endl; } return 0; } [root@promote 20161112]# ./test3 fjasl
c++中getline的用法
功能:读入一行数据。c++中有2种getline函数,一种在头文件 &amp;lt;istream&amp;gt; 中,是istream类的成员函数;另一种是在头文件 &amp;lt;string&amp;gt; 中,是普通函数。1.在头文件 &amp;lt;istream&amp;gt; 的getline函数两种重载形式:istream&amp;amp; getline (char* s, streamsize n );//读取最多n个字符保存在s对...
C++中getline函数
#include rn#include rnrnusing std::cin;rnusing std::cout;rnusing std::endl;rnusing std::string;rnrnint main()rnrn string s1;rn cin >> s1;rn string b;rnrn getline(cin, b);rnrn cout << b << endl; rnrn return 0;rnrn[img=https://img-bbs.csdn.net/upload/201411/08/1415449941_366646.png][/img]rn为什么输入hello world 输出却是world,谢谢!
c++文件读取中的getline
ifstream file;rnchar line[256];rnfile.getline(line,256);//我用这个函数不断读取文件,分步执行时,怎么有一次读到一个空串呢?rn文件没有空行,这是怎么回事??
C++中的getline用法.
[code=C/C++]int main()rnrn ifstream fin;rn ofstream fout;rn int tag=StringInput();rn int string01[100];rn int i;rn fin.open("string01.txt");rn if(fin.fail())rn rn cout << "File open error!";rn exit(1);rn rn for(i=0;i<100;i++)rn rn if(!getline(fin,string01[i]))rn break;rn rnrn system("pause");rn[/code]rnrn1>d:\文档\project\exercises6.2\exercises6.2\exercises6.2.cpp(48) : error C3861: “getline”: 找不到标识符rnrn额,我想读入一个文件,文件里面的内容是这样子的:rn3rn45rn657rn78rnrn...rn每个数字一行,我想读取每个数字之后依次然后存放在string01数组里面.rnrn我现在的这样子做貌似有很多问题...rnrnrn谢谢诸位啦.
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法

相似问题

2
C++ 整型数组连续输入
2
C++中遇到ifstream问题
1
C++对Spring类进行replace操作报错问题
2
c++ 文件读写操作在读.cpp文件时出现错误(学习中。。。。。。。。)
2
C++:这段输入几个字符串的代码为什么运行的时候错了?
1
c++文件流中想要删除文本文件中的某些字符串,为什么下面的代码删除那部分无法运行出来?
4
请问以下这段C++代码有什么问题?
2
关于C++的文件操作和getline()的问题?
1
c++报错undefined reference to "析构函数",引号里的析构函数是基类的析构函数,声明为了纯虚函数?
1
c++报错undefined reference to "析构函数" ,引号里的析构函数是一个基类的析构函数,是纯虚析构函数?
1
C++打开含有数据的二进制文件报错,如何解决?
1
c++智能指针的使用问题??
1
cin.getline().getline() 的问题
1
C++报错显示Program received signal SIGSEGV,Segmentation fault,求大神帮助
1
超简单!!闭环加密问题,这段代码不输出内容,是怎么一回事呢?
0
求大神解答洛谷P1071 C++代码为什么WA一个点qwq 但是Clion上能过
1
c++读写出现问题 没有与参数列表匹配的 重载函数
0
C++课程设计其中一项是把数据输入到文件中,现在想要把文件数据读取存入到数组里并且搜索查询输出部分数据
2
一个C++链表问题........
2
一个简单的单独编译测试。用的ide是dev C++,第一次成功,但后来几次打开都编译失败,求大神赐教