C++的问题 望大哥大姐们帮看一下是那有问题

作者&投稿:赤石 (若有异议请与网页底部的电邮联系)

这个是调试的输出信息,应该是输入缓冲区出错,导致输入指针陷入死循环。在sum++;后添加 fflush(stdin); 强制刷新输入缓冲区即可。刷新输入缓冲区的方法还有很多,网上可以查得到。



程序没什么大问题,就是输入流的问题。如果一次输入多个字符,程序会取第一个字符。但是依然存在输入流中。这样会导致程序每次取得字符都一样,从而进入死循环。修改一下如下:
#include "stdafx.h"
#include <iostream>
#include "练习2.h"
using namespace std;
#include<stdio.h>
#include"stdlib.h"
#include"time.h"

void main()
{
int a,b,sum,sumright;
sum=0;
sumright=0;
char mark;
srand(time(NULL));
cout<<"***欢迎你来到加减法的世界***"<<endl;
do
{
int temp=rand()%2;
a=rand()%100;
b=rand()%100;

switch(temp)
{
case 0:
{
int ans;
cout<<a<<'+'<<b<<'=';
cin>>ans;
if (a+b==ans)
{
cout<<"恭喜你回答正确,你真是太聪明了"<<endl;
sumright++;
}
else
cout<<"对不起你回答不正确,再接再厉,加油!!!"<<endl;
break;
}
case 1:
{
int ans;
cout<<a<<'-'<<b<<'=';
cin>>ans;
if (a-b==ans)
{
cout<<"恭喜你回答正确,你真是太聪明了"<<endl;
sumright++;
}
else
cout<<"对不起你回答不正确,再接再厉,加油!!!"<<endl;
}

}
cout<<"还需要再玩一次吗?(N代表不玩了)"<<endl;

while (true)
{
cin>>mark;
if (cin.good())//输入的是字符,停止当前循环。
break;
else//若不是字符,则要清空输入流。重新再来。
{
cin.clear();
cin.sync();
}
}
sum++;
}while(mark!='n'&&mark!='N');

cout<<"你的正确率为"<<sumright*100.0/sum/100*100<<'%'<<endl;
cout<<sum<<sumright<<endl;
}

程序没什么大问题,就是输入流的问题。如果一次输入多个字符,程序会取第一个字符。但是依然存在输入流中。这样会导致程序每次取得字符都一样,从而进入死循环。修改一下如下:
#include "stdafx.h"
#include <iostream>
#include "练习2.h"
using namespace std;
#include<stdio.h>
#include"stdlib.h"
#include"time.h"

void main()
{
int a,b,sum,sumright;
sum=0;
sumright=0;
char mark;
srand(time(NULL));
cout<<"***欢迎你来到加减法的世界***"<<endl;
do
{
int temp=rand()%2;
a=rand()%100;
b=rand()%100;

switch(temp)
{
case 0:
{
int ans;
cout<<a<<'+'<<b<<'=';
cin>>ans;
if (a+b==ans)
{
cout<<"恭喜你回答正确,你真是太聪明了"<<endl;
sumright++;
}
else
cout<<"对不起你回答不正确,再接再厉,加油!!!"<<endl;
break;
}
case 1:
{
int ans;
cout<<a<<'-'<<b<<'=';
cin>>ans;
if (a-b==ans)
{
cout<<"恭喜你回答正确,你真是太聪明了"<<endl;
sumright++;
}
else
cout<<"对不起你回答不正确,再接再厉,加油!!!"<<endl;
}

}
cout<<"还需要再玩一次吗?(N代表不玩了)"<<endl;

while (true)
{
cin>>mark;
if (cin.good())//输入的是字符,停止当前循环。
break;
else//若不是字符,则要清空输入流。重新再来。
{
cin.clear();
cin.sync();
}
}
sum++;
}while(mark!='n'&&mark!='N');

cout<<"你的正确率为"<<sumright*100.0/sum/100*100<<'%'<<endl;
cout<<sum<<sumright<<endl;
这个是调试的输出信息,应该是输入缓冲区出错,导致输入指针陷入死循环。在sum++;后添加 fflush(stdin); 强制刷新输入缓冲区即可。刷新输入缓冲区的方法还有很多,网上可以查得到。

你需要对输入作出判断,我调试了你的程序,不光输入再玩一次会有问题,就算计算加减法的时候,如果输入字母,也会死循环。
所以,你要对所有输入进行判断,该是数字的时候是数字,该是字母的时候是字母,并且进行相应限制,数字和字母的个数或大小等等,不难,问题我帮你找到了,你自己改改吧。

你的问题可以如下解决:
1.包含string文件 #include "string"
2.改变mark 的类型为 string mark
3.while 条件 改为 while(mark[0]!='n'&&mark[0]!='N')
4.将你的cin>>ans;后面到break;的地方替换成下列代码可解决输入字母的死循环问题
if(!cin.good())
{
cin.clear();
fflush(stdin);
cout<<"输入错误类型错误,请输入数字"<<endl;
}
else
{
if(a+b==ans)
{
cout<<"恭喜你回答正确,你真是太聪明了"<<endl;
sumright++;
}
else
cout<<"对不起你回答不正确,再接再厉,加油!!!"<<endl;
}

电脑有问题,大哥大姐帮下忙~

您好,很高兴为您解答。
您的系统引导文件已经丢失了,英文的意思是:没有发现引导文件。
你可以进PE系统内使用进行修复。(这里有些麻烦,详细的请HI我。)
前天公司一台电脑也是出现了这个问题,进入PE系统后修复了引导就解决了。
不懂的地方可以HI我。
红颜相随救助团 为您解答

该内存不能为read的原因有很多,但是一般都是由于病毒木马造成或应用程序组件丢失所致,你可以常使用下面的方法解决该内存不能为read的问题。
该内存不能为read原因
1.病毒木马造成的,在当今互联网时代,病毒坐着为了获得更多的牟利,常用病毒绑架应用程序和系统文件,然后某些安全杀毒软件把被病毒木马感染的应用程序和系统文件当病毒杀了导致出现应用程序错误。
2.应用程序组件丢失,应用程序完整的运行需要一些系统文件或者某些ll文件支持的,如果应用程序组件不完整也会导致应用程序出错。
应用程序自身的bug引起的应用程序发生异常,人没有完人,程序也一样的,程序员只能做到尽量让bug出现少点,出现一个就解决一个bug。
3.应用软件与操作系统或其他应用软件发生不兼容造成应用程序发生异常。
4.操作系统自身的问题,操作系统本身有bug ,也会导致出现崩溃 应用程序错误 该内存不能为read。
5.电脑硬件兼容性也会引起的,还有散热不好,超频等也会出现应用程序错误的。
该内存不能为read解决办法
先排除是不是病毒木马引起的,请使用金山卫士进行木马查杀,
⑴、进入主界面进入【查杀木马】
⑵、然后点击【快速扫描】即可
2.用金山卫士进行漏洞修复,解决系统本身造成的应用程序发生异常。
⑴、进入主界面进入【漏洞修复】
⑵、然后点击【立即修复】即可
3.如果是单一某个应用程序引起的应用程序错误,那就尝试重新卸载该软件进行重新安装。如果还是无法解决,就关闭其他软件看是否能解决。
4.以上方法还是无法解决,那就肯能是硬件问题引起的,那就分别检查内存条,主板,散热器等等。这个建议找专业硬件维修商解决,不推荐大家自己手动解决。
按照上面的方法就可以解决你该内存不能为read的问题。
更多解决办法请看 http://jingyan.baidu.com/article/67508eb4f986c49cca1ce48e.html