C语言 cin.getline()的输入问题?

Python010

C语言 cin.getline()的输入问题?,第1张

getline是都一行,并把内容填入str,它不会因为你只留5个字节就不读完整一行了.如果你在一行内输入"两行"内容,本身就是输入不合规,对标准输出流的处理的期望值也是错误的.你就不应该用getline读

getline一定会读到\n,然后舍弃buffer放不下的内容

/*getline : get line into s, return length */

int getline(char s[], int lim){

int c, i

i = 0

while ( --lim >0 &&(c = getchar()) != EOF &&c != '\n') {

s[i++] = c

}

if (c == '\n') {

s[i ++] = c

}

s[i] = '\0'

return i

}

你是C语言新手吧,C++的头文件里有个BUG,一些用户还未修改。

就是cin与getline连用时就会有的。

我解释一下:当你输入filename时,比如是d:\1.txt你会回车表示结束输入,在C++字符串里面表示为d

:

\

1

.

t

x

t

\0。这个字符串里一共是9个元素,最后一个是结束符"\0"。当系统读入数据后,会把\0留下,而恰巧getline里面的结束符也是\0。这使得前面那个\0被系统误认为是你对getline输入的,所以就结束getline语句。

修改如下:

#include

<iostream>

#include

<fstream>

#include

<string>

using

namespace

std

int

main(void)

{

string

filename

fstream

fn

cout<<"请输入文件路径:"<<flush

cin>>filename

fn.open(filename.c_str(),ofstream::out|ofstream::app)

if

(fn)

cout<<filename<<"\t\t"<<"文件已经建立"<<endl

cout<<"输入要输入的内容"<<endl

getline(cin,filename)

getline(cin,filename)//只需再添加一个getline,如果要改头文件去官网

fn<<filename

fn.close()

system("pause")

return

0

}

还有什么问题?