C++判断输入结束的简单方法(从键盘输入+从文件读入)

判断输入结束的简单方式

1. 从键盘输入

1.最简单的方式,while(cin>>a){…},当想结束时只需 换行+输入Ctrl+Z+回车,此时cin>>a的返回值为false。

例1.初始化字符数组

#include<iostream>
using namespace std;

int main(){

char ch[20];
int i=0;
char a;

while(cin>>a){
    ch[i++]=a;
    }
for(i=0;i<20;i++){
    cout<<endl<<"ch["<<i<<"]: "<<ch[i];
    }

return 0;
}

C++判断输入结束的简单方法(从键盘输入+从文件读入)

2.以某字符为结束标志,例如’#’。只需在上面while中加入判断a!=’#'即可。

例2.初始化字符数组,以#结束

#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int main(){

char ch[20];
int i=0;
char a;

while(cin>>a&&a!='#'){//以井号为结束符
    ch[i++]=a;
    }

for(int j=0;j<i;j++){
    cout<<endl<<"ch["<<j<<"]: "<<ch[j];
    }
return 0;
}

C++判断输入结束的简单方法(从键盘输入+从文件读入)

二. 从文件读入

1.利用fstream流的eof()判断是否到文件结尾

例3.1从文件读入字符初始化字符数组,用!eof()判断文件结尾(此时会多读一个)

#include<cstdio>
#include<cmath>
#include<iostream>
#include <fstream>
using namespace std;
int main(){

char ch[20];
int i=0;
char a;

ifstream myfile;
myfile.open("C:\\Users\\lianz\\Desktop\\test0310.txt");

while(!myfile.eof()){     //此时会多读一个!!这样写往往得不到正确结果
    myfile>>ch[i++];
}
for(int j=0;j<i;j++){
    cout<<"ch["<<j<<"]: "<<ch[j];
    }
myfile.close();//关闭文件输入流
return 0;
}

C++判断输入结束的简单方法(从键盘输入+从文件读入)
C++判断输入结束的简单方法(从键盘输入+从文件读入)
我们发现,当文件已经到了末尾,他又会多读一个(若按行读取还可能会重复读取最后一行),这是因为在读完最后一个数据时,eofbit仍然是false。只有当流再往下读取时,发现文件已经到结尾了,才会将标志eofbit修改为true。

解决方案: 将!myfile.eof() 改为!myfile.peek()=EOF

修改后:
C++判断输入结束的简单方法(从键盘输入+从文件读入)
这次我们得到的就是正确的。

2.利用标志字符’#'作为读文件结束的标志

很简单,在while里加判断就行了。

while(myfile.peek()!=EOF){
    myfile>>a;
    if(a=='#')break; //读到#就结束
    ch[i++]=a;
}

C++判断输入结束的简单方法(从键盘输入+从文件读入)
效果如图。

以上只是简单直接的实现方式,有更简单的方法欢迎交流。