郑州做网站的论坛/网络培训
在循环中的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];elsea[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];elsea[i]=a[i]%b[j]+a[i]*b[j];}cout <<a<< endl;cout<<"剩余测试次数:"<<w-1<<endl;//直观显示剩余次数}return 0;
}