| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2517 人关注过本帖
标题:有什么办法可以让这样一个程序在遇到一个回车以后自动结束读取?
只看楼主 加入收藏
icedge
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-5-13
收藏
 问题点数:0 回复次数:11 
有什么办法可以让这样一个程序在遇到一个回车以后自动结束读取?
#include<iostream>
#include<conio.h>
#include<vector>
using namespace std;
char main(){
char a[5][8];
for(int i=0;i<=4;i++){
for(int j=0;j<=7;j++)
a[i][j]=getchar();
}
for(int i=0;i<=4;i++){
for(int j=0;j<=7;j++)
cout<<a[i][j];
cout<<endl;
}
system("pause");
}
这个程序在输入文本时必须输满40个字符才能输出结果,有什么办法可以让它在遇到一个回车就自动输出结果?
或者最好是能让数组本身的大小就可以随着输入内容而改变。因为如果只是让程序在遇到回车后停止读入数据,数组中其他没有负值的元素应该是自动被负了0值吧?最终也会影响输出结果。不过我觉得数组元素的个数是没办法任意由输入的数据个数来改变的,是否可以用向量来实现呢?
搜索更多相关主题的帖子: 办法 结束 回车 include 
2007-05-23 22:11
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
while((a[i][j]=getchar())!=13)

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-05-23 22:15
icedge
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-5-13
收藏
得分:0 
这样改的效果是不是一样的?但是运行结果还是和不加那个条件一样的。while循环不太会用。
#include<iostream>
#include<conio.h>
#include<vector>
using namespace std;
char main(){int i,j;
char a[5][8];
for( i=0;i<=4;i++){
for( j=0;j<=7&&a[i][j]!=13;j++)//////////////////
a[i][j]=getchar();
}
for( i=0;i<=4;i++){
for( j=0;j<=7;j++)
cout<<a[i][j];
cout<<endl;
}
system("pause");
}
2007-05-23 22:51
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
楼主想法可能不对哦,如果你要输入到一个2维数组或向量的话,你就应该要确定它的维数啊!

可以用回车结束输入,但是你想它的大小随着你输入的字符多少变化,怎么行呢?如果是一维的话,就没问题!

Fight  to win  or  die...
2007-05-24 09:02
BJSH
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-5-9
收藏
得分:0 

# include "stdafx.h"
# include <iostream>
using namespace std;
int main(){
char a[5][8];
int i, j;
for( i=0;i<=4;i++)
{
for( j=0;j<=7;j++)
if ( (a[i][j]=getchar()) == '\n' )
break;
if ( j <= 7 )
break;

}
a[i][j]='\0';
for( i=0;i<=4;i++)
{
for( j=0;j<=7;j++)
if ( a[i][j] != '\0' )
cout<<a[i][j];
else
break;
if ( j <= 7 )
break;

}

return 0;
}


遇到第一个回车自动结束;
数组中其他没有赋值的元素并不是自动赋值为0;而是垃圾值;
上面这段代码屏蔽了那些垃圾值;

最好是能让数组本身的大小就可以随着输入内容而改变;
这最好使用指针;


[此贴子已经被作者于2007-5-24 9:22:55编辑过]

2007-05-24 09:19
icedge
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-5-13
收藏
得分:0 
如果把这段程序作成一个密码的录入和核对的程序,是不是就会有一个密码位数的上限?这也就是现在的所有网络和软件帐户密码都有位数上限的原因?也就是说在定义一个录入键盘输入字符的数组时还是必须先给一个极限容量的,这样在输入数据大小小于这个容量时,其他没有被负值的元素就只能在输出时用别的方法过滤掉。
另外,如果是一维数组或向量又怎么让容器随着实际数据的大小来改变容量呢?
2007-05-24 11:34
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用icedge在2007-5-24 11:34:46的发言:
如果把这段程序作成一个密码的录入和核对的程序,是不是就会有一个密码位数的上限?这也就是现在的所有网络和软件帐户密码都有位数上限的原因?也就是说在定义一个录入键盘输入字符的数组时还是必须先给一个极限容量的,这样在输入数据大小小于这个容量时,其他没有被负值的元素就只能在输出时用别的方法过滤掉。

这个就不很清楚了,关系到网络和软件的密码帐户,我想最基本的思想也许是你说这样,但是肯定不是这样实现的,估计就太复杂了。你可以用你想的去模拟一个密码程序。

char ch;
vector<char> cvec;
while ((ch = getchar()) != '\n')
cvec.push_back(ch);
for (unsigned int i = 0;i < cvec.size();++i)
cout << cvec[i];

用vector可以这样!


Fight  to win  or  die...
2007-05-24 12:04
icedge
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-5-13
收藏
得分:0 
谢谢大家帮忙了。
2007-05-24 12:37
icedge
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-5-13
收藏
得分:0 
还有一个问题,回车和换行在c++中是怎么区分的?回车的ascII是13,但是在这个程序中的限定条件如果是13的话,程序在运行时即便点下回车键也不会自动结束,只能用换行符(10),才会达到预期目的。
2007-05-24 12:55
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

[CODE]#include <iostream>
using namespace std;
int main(){
cout<<"difference \r"<< "a"<<endl;
}[/CODE]

你运行下就知道了,\r是回车符,\n是换行符。自己改红色那里!


Fight  to win  or  die...
2007-05-24 13:18
快速回复:有什么办法可以让这样一个程序在遇到一个回车以后自动结束读取?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048236 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved