在循环中的cin.getline()
while(cin.getline(a,100))中无法重复输入,
若改成:
while(cin>>a){
cin.get();
}
可解决多次输入问题,但是默认空格结束。
在C语言中可以这样解决
1.gets()函数 ,用gets()替代scanf();
gets可以无限读取字符串,不会判断上限,以回车结束读取。其用法为gets(s),其中s为字符串变量(字符串数组名或字符串指针)。简单的理解就是读入一串字符(遇到回车结束)
2.scanf("%[^\n]",str) ,遇到"\n"结束
‘^‘含有非的意思
“%[^\n]“即遇到\n结束。
如果使用”%[^v]”,那我们输入 “I love you!” ,输出的就是 “I lo”
3.因为cin自动把enter忽略了,而cin.getline不行,因为默认是遇到’\n’就结束读入,您可以尝试这样:
void main()
{
int a ;
(cin >> a).get();//把遗留下来的’/n’去掉。
char b[10];
cin.getline(b,10);
cout << a << endl
<< b << endl;
}
例如:
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
int main()
{
int b[7];
int i,j,len,t,m,w;
int n=4965873;
for(i=6; i>=0; i--)
{
b[i]=n%10;
n=n/10;
}//将循环体置入数组中
cout<<"请输入测试的次数:";
(cin >> m).get();//去掉回车,防止cin.getline()得到回车结束
for(w=m; w>0; w--)//循环次数
{
char a[100];
cout<<"请输入要加密或者解密的内容:";
gets(a);
len=strlen(a);
cout<<"输入1加密,输入2解密:";
(cin >> t).get();//同上
if(t==1)//加密操作
{
for(i=0; i<len; i++)
{
j=i%7;
if((a[i]+b[j])>=32&&(a[i]+b[j])<=122)
a[i]=a[i]+b[j];
else
a[i]=a[i]%b[j];
}
}
else//解密操作
for(i=0; i<len; i++)
{
j=i%7;
if((a[i]-b[j])>=32&&(a[i]-b[j])<=122)
a[i]=a[i]-b[j];
else
a[i]=a[i]%b[j]+a[i]*b[j];
}
cout <<a<< endl;
cout<<"剩余测试次数:"<<w-1<<endl;//直观显示剩余次数
}
return 0;
}