看下这个C++程序 如果用户错输入字符 程序就崩溃!有什么方法可以解决dnf崩溃

练习C++程序,要求从键盘输入int值。那么怎么屏蔽掉误输入的字符?如字母。
[问题点数:0分]
练习C++程序,要求从键盘输入int值。那么怎么屏蔽掉误输入的字符?如字母。
[问题点数:0分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2003年6月 专题开发/技术/项目大版内专家分月排行榜第三2002年8月 专题开发/技术/项目大版内专家分月排行榜第三
2003年6月 专题开发/技术/项目大版内专家分月排行榜第三2002年8月 专题开发/技术/项目大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。想问下C++字符串的输入~哪种程序执行效率更高~_百度知道
想问下C++字符串的输入~哪种程序执行效率更高~
如题,用string来定义字符串和用C语言风格的字符数组来作为输入哪个程序的执行效率更高?string类每建立一个对象要占用多少个字节左右?请高手指教下~谢谢~
提问者采纳
C++是面向对象的程序设计语言。它想让人们忽略底层的一些细节。让人们有更多的时间去着眼于程序设计。string 类解决的问题是字符串型数据的问题主要解决你在程序运行前不知道 字符串有多长这样你就不能用字符数组还能解决
例如你原来是char a[10]; 然后程序的后来字符串长度是14。你就需要用很多繁琐的代码解决这一问。string 主要是解决这些问题。而且还提供一些重载使程序可读性更强。更容易理解。你问的是程序执行效率。也就是空间复杂程度和时间复杂程度。如果正常定义字符型数组
那么应该是自动型变量在程序运行中的时候。所占空间为栈。string 应该也是运行的时候生成的自动型变量。所占空间也在栈中。空间复杂度应该差不多。运行起来的时候。应为都是C++标准库中的数据类型。也应该是差不多的。如果你想更了解的话看看thinking in c++吧。我一个字一个字给你打的。希望对你有帮助。
提问者评价
十分感谢你,很少看到没有分都这么详细回答的人,真的很谢谢你,这是一种对待学习的专业精神~
其他类似问题
字符串的相关知识
其他1条回答
C语言风格vc分配16个字节。gcc 4个~
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁急!!C++程序那里错啦!!求助 (输入字符型的一串数字,输出逆序的整数型数,例如,输入12345则输出54321)_百度知道
急!!C++程序那里错啦!!求助 (输入字符型的一串数字,输出逆序的整数型数,例如,输入12345则输出54321)
int reserveprime(char s){ while(1) {
int n,num=0, revNum=0;
int a[50];
char s[50];
n=strlen(s);
for(int i=n-1;i&=0;i--)
a[i-n+1]=s[i];
a[i-n+1]-=48;
revNum=revNum*10+a[i-n+1];
return revN }
我有更好的答案
按默认排序
两个错误。一、int reserveprime(char s[ ])二、去掉char s[50]已经验证过。
其他类似问题
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分100 UID阅读权限10积分122帖子精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
白手起家, 积分 122, 距离下一级还需 78 积分
帖子主题精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
论坛徽章:0
1 #include&stdio.h&
&&2 #include&stdlib.h&
&&3 #include&string.h&
&&5 #define& &SIZE& &50&&/*字符串最大长度*/
&&6 #define& &COUNT&&50&&/*最大的字符串个数*/
&&8 int& &main(void)
10& && && &int& &i,j=0;
11& && && &char&&str[50]=&/home/cyg/test/client&;
12& && && &char&&cTemp[SIZE]={'\0'};
13& && && &char&&*cpString[COUNT]={NULL};
14& && && &char&&*paString[50];
15& && && &FILE&&*
16& && && &if((fp=fopen(&input&,&a+&))==NULL)
17& && && &{
18& && && && && &&&printf(&File&&input&&opens& &error!&);
19& && && && && &&&exit(1);
20& && && &}
21& && && &for(i=0;i&COUNT;i++)
22& && && &{
23& && && && && &&&if(fgets(cTemp,SIZE,fp)==NULL)& &
24& && && && && &&&cpString[i]=(char*)malloc(strlen(cTemp)+1);& &&&//所有字符串指针存放在cpString里面& && && && &&&
25& && && && && &&&strcpy(cpString[i],cTemp);
26& && && && && &&&//printf(&%s&,cpString[i]);& && && && &
27& && && &}
28& && && &for(i=0;i&COUNT;i++)
29& && && &{
30& && && && && &&&paString[50]=cpString[i];
31& && && && && &&&if(strcmp(cpString[i],str)==0)
32& && && && && &&&{
33& && && && && && && && & j++;
34& && && && && && && && &
35& && && && && &&&}
36& && && &}
37& && && &//printf(&%d\n&,j);
38& && && &if(j!=1)
39& && && &{
40& && && &fputs(str,fp);
41& && && &}
42& && && &fclose(fp);
43& && && &for(i=0;i&COUNT;i++)
44& && && &{
45& && && && && &&&free(cpString[i]);
46& && && &}
47& && && &return& &0;
[ 本帖最后由 langue 于
19:03 编辑 ]
学习,学习,再学习。。。
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分100 UID阅读权限10积分122帖子精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
白手起家, 积分 122, 距离下一级还需 78 积分
帖子主题精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
论坛徽章:0
自己顶一下~~
学习,学习,再学习。。。
空间积分1 信誉积分160 UID1807866阅读权限30积分1711帖子精华可用积分1713 专家积分20 在线时间66 小时注册时间最后登录
家境小康, 积分 1711, 距离下一级还需 289 积分
帖子主题精华可用积分1713 专家积分20 在线时间66 小时注册时间最后登录
论坛徽章:0
没明白,你这个是为了一个什么功能?
&&for(i=0;i&COUNT;i++)
29& && && &{
30& && && && && &&&paString[50]=cpS
31& && && && && &&&if(strcmp(cpString,str)==0)
32& && && && && &&&{
33& && && && && && && && & j++;
34& && && && && && && && &
35& && && && && &&&}
36& && && &}
这段是做什么意思。
空间积分1 信誉积分160 UID1807866阅读权限30积分1711帖子精华可用积分1713 专家积分20 在线时间66 小时注册时间最后登录
家境小康, 积分 1711, 距离下一级还需 289 积分
帖子主题精华可用积分1713 专家积分20 在线时间66 小时注册时间最后登录
论坛徽章:0
再说了,就这代码。
编译都过不了。还能到“程序出现段错误”这一步吗?
空间积分0 信誉积分100 UID阅读权限10积分122帖子精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
白手起家, 积分 122, 距离下一级还需 78 积分
帖子主题精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
论坛徽章:0
原帖由 xieweihua 于
14:46 发表
没明白,你这个是为了一个什么功能?
&&for(i=0;i
是这样的,程序已经将文件中的字符串读出并写入到字符数组中,
然后要在字符数组中找有没有指定的字符串
这个就是为了在字符串数组里面查找有没有指定的字符串
这样写不对吗?程序编译通过了阿,就是不能运行,出现段错误~~~
请多多指导~~
学习,学习,再学习。。。
空间积分0 信誉积分2 UID阅读权限20积分331帖子精华可用积分331 专家积分0 在线时间536 小时注册时间最后登录
稍有积蓄, 积分 331, 距离下一级还需 169 积分
帖子主题精华可用积分331 专家积分0 在线时间536 小时注册时间最后登录
论坛徽章:0
paString[50]=cpS
paString[i]=cpS
空间积分1 信誉积分160 UID1807866阅读权限30积分1711帖子精华可用积分1713 专家积分20 在线时间66 小时注册时间最后登录
家境小康, 积分 1711, 距离下一级还需 289 积分
帖子主题精华可用积分1713 专家积分20 在线时间66 小时注册时间最后登录
论坛徽章:0
#include&stdio.h&
&#include&stdlib.h&
&#include&string.h&
&#define& &SIZE& &50&&/*字符串最大长度*/
&#define& &COUNT&&50&&/*最大的字符串个数*/
&int& &main(void)
&&&&&&&&&int& &i,j=0;
&&&&&&&&&char&&str[50]=&/home/cyg/test/client&;
&&&&&&&&&char&&cTemp[SIZE]={'\0'};
&&&&&&&&&char&&*cpString[COUNT]={NULL};
&&&&&&&&&//char&&*paString[50];
&&&&&&&&&FILE&&*fp;
&&&&&&&&&if((fp=fopen(&input&,&a+&))==NULL)
&&&&&&&&&{
&&&&&&&&&&&&&&&&&printf(&File&&input&&opens& &error!&);
&&&&&&&&&&&&&&&&&exit(1);
&&&&&&&&&}
&&&&&&&&&for(i=0;i&COUNT;i++)
&&&&&&&&&{
&&&&&&&&&&&&&&&&&if(fgets(cTemp,SIZE,fp)==NULL)& &break;
&&&&&&&&&&&&&&&&&cpString[i]=(char*)malloc(strlen(cTemp)+1);//cpString=(char*)malloc(strlen(cTemp)+1);& &&&//所有字符串指针存放在cpString里面& && && && &&&
&&&&&&&&&&&&&&&&&strcpy(cpString[i],cTemp);//strcpy(cpString,cTemp);
&&&&&&&&&&&&&&&&&printf(&%s&,cpString[i]);& && && && &
&&&&&&&&&}
&&&&&&&&&for(i=0;i&COUNT;i++)
&&&&&&&&&{
&&&&&&&&&&&&&&&&&//paString[50]=cpS
&&&&&&&&&&&&&&if(cpString[i]!=NULL)
&&&&&&&&&&&&& & {
&&&&&&&&&&&&&&&&&if(strcmp(cpString[i],str)==0)
&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&j++;
&&&&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&&&&&&}
&&&&&&&&& && & }
&&&&&&&&&}&&
&&&&&&&&&//printf(&%d\n&,j);
&&&&&&&&&if(j!=1)
&&&&&&&&&{
&&&&&&&&&fputs(str,fp);
&&&&&&&&&}
&&&&&&&&&fclose(fp);
&&&&&&&&&for(i=0;i&COUNT;i++)
&&&&&&&&&{
&&&&&&&&&&&&&&&&&free(cpString[i]);
&&&&&&&&&}
&&&&&&&&&return& &0;
你試一下這個。
[ 本帖最后由 xieweihua 于
17:05 编辑 ]
空间积分0 信誉积分100 UID阅读权限10积分122帖子精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
白手起家, 积分 122, 距离下一级还需 78 积分
帖子主题精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
论坛徽章:0
像楼上的程序运行 strcpy函数出现错误了~~
我把程序改成如下:
&&1 #include&stdio.h&
&&2 #include&stdlib.h&
&&3 #include&string.h&
&&4 #include&errno.h&
&&6 #define& &SIZE& &128&&/*字符串最大长度*/
&&7 #define& &COUNT&&50&&/*最大的字符串个数*/
&&9 int main(void)
11& && && &int& &i,j=0,k=0;
12& && && &char&&str[50]=&/home/cyg/test/client&;
13& && && &char&&cTemp[SIZE];
14& && && &char&&*cpString[COUNT]={NULL};
15& && && &FILE&&*
16& && && &if((fp=fopen(&input&,&a+&))==NULL)
17& && && &{
18& && && && && &&&perror(&fopen error!&);
19& && && && && &&&exit(1);
20& && && &}
21& && && &while(!feof(fp))& &&&///////////////////////////////////////////新加的while循环
22& && && &{
23& && && && && &&&for(i=0;i&COUNT;i++)
24& && && && && &&&{
25& && && && && && && && & if(fgets(cTemp,SIZE,fp)==NULL)
26& && && && && && && && & {
27& && && && && && && && && && && &perror(&fgets error!&);
28& && && && && && && && && && && &printf(&%d\n&,errno);
29& && && && && && && && && && && &exit(1);
30& && && && && && && && & }
31& && && && && && && && & cpString[i]=(char*)malloc(strlen(cTemp)+1);& &&&//所有字符串指针存放在cpString里面& && && && &&&
32& && && && && && && && & strcpy(cpString[i],cTemp);
33& && && && && &&&//printf(&%s&,cpString[i]);& &&&
34& && && && && &&&}
35& && && && && &&&k=i+1;& && && && && && && && && & ///////////////////////////////////得出文件中几行字符串,也就是字符数组中有几个字符串
37& && && &}
38& && && &for(i=0;i&k;i++)& && && && && && && &///////////////////////////////////// 在这个数组中查找字符串
39& && && &{
40& && && && && &&&if(cpString[i]!=NULL)& &&&///////////////////////////////采用楼上的,不过觉得作用不大
41& && && && && &&&{
42& && && && && && && && & if(strcmp(cpString[i],str)==0)
43& && && && && && && && & {
44& && && && && && && && && && && &j++;
45& && && && && && && && && && && &
46& && && && && && && && & }
47& && && && && &&&}
48& && && &}
49& && && &//printf(&%d\n&,j);
50& && && &if(j!=1)
51& && && &{
52& && && &fputs(str,fp);
53& && && &j--;
54& && && &}
55& && && &fclose(fp);
56& && && &for(i=0;i&COUNT;i++)
57& && && &{
58& && && && && &&&free(cpString[i]);
59& && && &}
60& && && &return& &0;
可是程序运行 有莫名的错误
cyg@ubuntu:~$ ./d
fgets error!: Success
我查了错误代码 是#define ESPIPE 29 /* Illegal seek */& &
不知道又出在哪里了 :em16: :em16: :em16: :em16: :em16: :em16:
[ 本帖最后由 langue 于
19:03 编辑 ]
学习,学习,再学习。。。
空间积分0 信誉积分100 UID阅读权限10积分122帖子精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
白手起家, 积分 122, 距离下一级还需 78 积分
帖子主题精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
论坛徽章:0
大家帮忙看一下啊~~~
学习,学习,再学习。。。
空间积分0 信誉积分100 UID阅读权限10积分122帖子精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
白手起家, 积分 122, 距离下一级还需 78 积分
帖子主题精华可用积分122 专家积分0 在线时间65 小时注册时间最后登录
论坛徽章:0
上面的程序自己改错了
在fgets 函数出了问题
现在改好的代码
1 #include&stdio.h&
&&2 #include&stdlib.h&
&&3 #include&string.h&
&&4 #include&errno.h&
&&6 #define& &SIZE& &128&&/*字符串最大长度*/
&&7 #define& &COUNT&&50&&/*最大的字符串个数*/
&&9 int main(void)
11& && && &int&&i,j=0;
12& && && &char str[50]=&/home/cyg/test/client2&;
13& && && &char cTemp[SIZE];
14& && && &char *cpString[COUNT]={NULL};
15& && && &FILE *
16& && && &if((fp=fopen(&input&,&a+&))==NULL)
17& && && &{
18& && && && && &&&perror(&fopen error!&);
19& && && && && &&&exit(1);
20& && && &}
21& && && &for(i=0;i&COUNT;i++)
22& && && &{
23& && && && && &&&if(fgets(cTemp,SIZE,fp)==NULL)
24& && && && && &&&cpString=(char*)malloc(strlen(cTemp)+1);& &&&//所有字符串
& & 指针存放在cpString里面& && && && &&&
25& && && && && &&&strcpy(cpString,cTemp);
26& && && && && &&&//printf(&%s&,cpString);& &&&
27& && && &}
29& && && &for(i=0;i&COUNT;i++)
30& && && &{
31& && && && && &&&if(cpString!=NULL)
32& && && && && &&&{
33& && && && && && && && & if(strcmp(cpString,str)==0)
34& && && && && && && && & {
35& && && && && && && && && && && &j++;
36& && && && && && && && && && && &
37& && && && && && && && & }
38& && && && && &&&}
39& && && &}
40& && && &printf(&%d\n&,j);
41& && && &if(j!=1)
42& && && &{
43& && && &fputs(str,fp);
44& && && &fputc('\n',fp);
45& && && &}
46& && && &if(j==1)
47& && && &{
48& && && &j--;
49& && && &printf(&%d\n&,j);
50& && && &}
51& && && &fclose(fp);
52& && && &for(i=0;i&COUNT;i++)
53& && && &{
54& && && && && &&&free(cpString);
55& && && &}
56& && && &return& &0;
可是程序没有达到功能 。。。。&&没有实现&&先查找有没有,没有的话写入的功能 ,一直在写入。。。
继续改正。。。
学习,学习,再学习。。。
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处我想弄一个程序,C++,在控制台下输入字符,同时能够在下一行自动显示上一行输入的字符,输一个字符下一行显示一个,而不是同时一起显示......我刚学C++,请教高手,这个怎么弄,谢谢了
我想弄一个程序,C++,在控制台下输入字符,同时能够在下一行自动显示上一行输入的字符,输一个字符下一行显示一个,而不是同时一起显示......我刚学C++,请教高手,这个怎么弄,谢谢了 145
如题。谢谢了
补充:假如一个控制台程序,我在上面输入1djfdsjflsn 下面一行自动跟踪输出1djfdsjflsn 而不是一起输出显示的,输入1的时候下面自动输出1,输入d下面也输出d...
看你提到了SetConsoleCursorPosition 应该是VC环境,你的程序有问题
1. cin有自己的缓冲区,你写的那个如果不输入回车不会执行cin
2. 如果用SetConsoleCursorPosition,输出多少行,什么位置其实很轻松
3. 严格来说,如果要支持像终端的效果,这个要复杂很多,不能用输入,而是要监听WM_KEYDOWN消息,从而来控制输出,
&
以下的程序,可以运行在VS2005中,如果只是输入字母数字和基本的符号,没问题,输入回车退出,不支持Del跟退格,有兴趣可以继续完善。
&
#include "stdafx.h"#include &iostream&#include &conio.h&#include&windows.h&
void PrintChar(char c,int count){&HANDLE&& hC//定义一个句柄 &hCon = GetStdHandle(STD_OUTPUT_HANDLE);&& //获得输出设备的句柄 &COORD&& //定义结构体变量 &setps.X =&setps.Y = 1;&&& SetConsoleCursorPosition(hCon,setps);& //定位 &cout&&c;&setps.X =&setps.Y = 0;&&& SetConsoleCursorPosition(hCon,setps);& //定位 &cout&&c;}void main(){&&cout&&&int count=0;&&do&{&&c=(char)_getch();&&if (c!='\n')&&{&&& &&&PrintChar(c,count++);&&}&}&while (c!='\n');}
&
好..谢谢提醒,确实应该监听WM_KEYDOWN,明白了....我回去试试这个程序,我现在只是能够大概看懂,呵呵,新手,能够达到我的意图,我给你分..谢谢了
&&& 客气,刚刚贴完看了下,发现俩错误,void main(){&&//cout&&&int count=0;&&do&{&&c=(char)_getch();&&if (c!='\n')&&{&&& &&&PrintChar(c,count++);&&}&}&while (c!='\r');}
我用的是VC6.0 ,改动下你的程序,确实可以达到我当初的意愿,添加GetConsoleScreenBufferInfo( hOut, &bInfo ); 后,修改了你的一行溢出的问题,谢谢你了,分给你
的感言:谢谢!
其他回答 (3)
不知道是否符合你的要求
#include&iostream&int main(){
&&while(1)&{
&&& //接收输入&&&&cin &&
&&& //显示输入&&& cout && c &&&}
&return 0;}
#include&iostream&
int main(){
&for(&;cin&&&) &//每次循环你输入 的字符将要保存到c.&
& cout&&c&&&&&&& //输出c的字符,然后end(换行); 再循环 知道你把0传给字符c;
&
&&&&&&& //& 这里有个问题 如果你输入的不是字符而是字符串怎么办?也就出错了。所以要加个判断
&return 0;}
这不对吧....cin&&c以回车结束输入,显示的是c跟endl,如果这样,那么输入输出显示就这样
c等等..这显然不是我要的答案
那就不能调用 cin 了。。调用cin肯定会显示。
PRINT "A"用Quick Basic编译吧!QUICKBASIC是编译型的,所以符合要求。************************************************C/C++不可能!一个可以编译运行的C/C++程序必要要定义main()函数,它的最简定义如下:main(){...}去掉中间的函数体代码不算,这个main()的定义就要用8个字符,接下来要用4个字符实现这样的一个输出的功能,是不太可能的事情,不能包含头文件,否则,长度将大大超出,即使使用内嵌的汇编也是要超出12个字符的。所以是行不通的! 如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la
不,我不相信C++行不通这个问题,我的思路是获取输入流中的一个字符,输出,然后用SetConsoleCursorPostion定位光标到上一层,再获取输入流中的一个字符,输出,以此循环,直到某一条件结束循环.....
不过我不知道怎么具体实现.....所以想请教别人这个怎么实现的
等待您来回答
编程领域专家

我要回帖

更多关于 解决dnf崩溃 的文章

 

随机推荐