新手问题(遍历数组)

Cain 2005-07-12 11:05:41
#include <iostream>
using namespace std;

struct S{
public:
void fun();
string fun2();
};

void S::fun() {
char c[3];

for (int i = 0; i < 3; i++) {
cin.get(c[i]);
}

for (int i = 0; c[i] != 0; i++) {
cout << c[i] << endl;
}

for (char* p = c; *p != 0; p++) {
cout << &p << ":" << p << endl;
}
}

int main() {
S obj;

obj.fun();

char j;
cin >> j;

return 0;
}

我输入qwe,这个程序为什么会输出
qwe
q
w
e

7
之类的一大段乱码?

另外再问一下如果统计数组内元素的个数?
...全文
513 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzgyb 2005-07-12
  • 打赏
  • 举报
回复
why25():
呵,已经贴了
xzgyb 2005-07-12
  • 打赏
  • 举报
回复
void S::fun() {
char c[4];

for (int i = 0; i < 3; i++) {
cin.get(c[i]);
}

c[ 3 ] = '\0';

for (i = 0; c[i] != 0; i++) {
cout << c[i] << endl;
}

for (char* p = c; *p != 0; p++) {
cout << &p << ":" << p << endl;
}
}
why25 2005-07-12
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

struct S{
public:
void fun();
string fun2();
};

void S::fun() {
char c[4]; //变一下

for (int i = 0; i < 3; i++) {
cin.get(c[i]);
}
c[3]='\0'; //加一下
for (int i = 0; c[i] != 0; i++) {
cout << c[i] << endl;
}

for (char* p = c; *p != 0; p++) {
cout << &p << ":" << p << endl;
}
}

int main() {
S obj;

obj.fun();

char j;
cin >> j;

return 0;
}
这样就行了,应该是字符串结束没弄好
everestsun 2005-07-12
  • 打赏
  • 举报
回复
什么意思c[i] != 0;?
for (i = 0; c[i] != 0; i++) {
cout << c[i] << endl;
}


jsjjms 2005-07-12
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

struct S{
public:
void fun();
string fun2();
};

void S::fun() {
char c[3];

cin>>c;

// int i=0;
for (char* p = c,int i=0; *p != 0; p++,i++)
{
cout << &p << ":" << *p << endl;
}
}

int main() {
S obj;

obj.fun();

system("PAUSE");
return 0;
}

paddy102 2005-07-12
  • 打赏
  • 举报
回复
问题1 是基本输入输出流控制问题,建议看看书,来了解输入输出的原理
问题2 你可以用变量控制
51365133 2005-07-12
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream.h>

class DATA
{
private:
int m_len;
char *m_data;
public:
DATA(const char *str)
{
m_len=strlen(str);
m_data=new char[m_len+1];
strcpy(m_data,str);
}
~DATA(void)
{
delete []m_data;
}
int GetLen(void)
{
return m_len;
}
void DispData(void)
{
printf("data:%s\n",m_data);
}
};
int main()
{
char d[256];
//接收
cin>>d;
//定义
DATA s(d);
//求len
int len=s.GetLen();
printf("len:%d\n",len);
//显示
s.DispData();

system("pause");
return 0;
}
darkstar21cn 2005-07-12
  • 打赏
  • 举报
回复
for (char* p = c; *p != 0; p++) {
cout << &p << ":" << p << endl;
}

越界了。
qfeng_zhao 2005-07-12
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

struct S{
public:
void fun();
string fun2();
};

void S::fun() {
char c[4];

for (int i = 0; i < 3; i++) {
cin.get(c[i]);
}
c[3] = '\0';
for (i = 0; c[i] != 0; i++) {
cout << c[i] << endl;
}

for (char* p = c; *p != 0; p++) {
cout << &p << ":" << p << endl;
}
}


int main() {
S obj;

obj.fun();

char j;
cin >> j;

return 0;
}
zhousqy 2005-07-12
  • 打赏
  • 举报
回复
另外再问一下如果统计数组内元素的个数?
--------------
sizeof(array) / sizeof(array[0])
zeiglar 2005-07-12
  • 打赏
  • 举报
回复
qwe -> q + "\n" + w "\n" + e + "\n" 很好说明。

&p输出的是,指针p的地址,
p输出的是,c的地址.

看样子,你刚学,就用最傻的办法吧.
int i = 0;
for( ; p[i] != NULL; ++i )//p就是数组
foochow 2005-07-12
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

struct S{
void fun();
string fun2();
};

void S::fun() {
char c[3];
int i;
cin>>c;

for (i = 0; i<3; i++) {
cout << c[i] << endl;
}

char*p=c;
for(i=0;i<3;++i)cout<<*(p+i)<<":"<<(int*)(p+i)<<endl;

}
int main() {
S obj;

obj.fun();

system("PAUSE");

return 0;
}
sunlu_eric 2005-07-12
  • 打赏
  • 举报
回复
没有越界!
&p是指p所占的地址,所以p++和她没有关系,
而p++后,因为他指的是地址,所以它读到0时才结束,所以会出现:
地址:345
地址:45
地址:5
(举例)我是用 why25() 的程序说的!
sunlu_eric 2005-07-12
  • 打赏
  • 举报
回复
int 应该是2呀!
我的正常!
Cain 2005-07-12
  • 打赏
  • 举报
回复
多谢 ForTopLevel

还有一个问题

TO: darkstar21cn(爱上小猫的小狗)(读不懂爱情所以来读程序) ( ) 信誉:99 2005-07-12 11:38:00 得分: 0


for (char* p = c; *p != 0; p++) {
cout << &p << ":" << p << endl;
}

越界了。


能不能解释的清楚一点,我刚开始学C++,这个遍历的方法是书上抄下来的

ForTopLevel 2005-07-12
  • 打赏
  • 举报
回复
int是4,sizeof(iArr)/sizeof(iArr[0]) 相当于sizeof(iArr)/sizeof(int) 当然就是元素个数了.
Cain 2005-07-12
  • 打赏
  • 举报
回复
TO: zhousqy(标准C匪徒)(为了忘却的记念) ( ) 信誉:100 2005-07-12 11:28:00 得分: 0


另外再问一下如果统计数组内元素的个数?
--------------
sizeof(array) / sizeof(array[0])

我一直在写PHP,这个月才开始学C++,所以能否解释一下这些基础的东西( 书上没查到:( ) sizeof(array) / sizeof(array[0]) ?

int iArr[] = {1, 23, 4567};
cout << "size of:" << sizeof(iArr) << endl; // size of: 12 这里为什么是12,按字节算也不应该是12啊,莫非数组大小的算法和普通字符的不一样?
cout << "arr[0]:" << sizeof(iArr[0]) << endl; // arr[0]: 4 这里也是我迷惑的地方
cout << "array size: " << sizeof(iArr)/sizeof(iArr[0]) << endl; // array size: 3
eishen 2005-07-12
  • 打赏
  • 举报
回复
本站建设基本完成,希望大家多多支持,有什么好的建议请到论坛留言,我们会越做越好。www.52cpp.cn

c++,asp,photoshop,数据库,flash,等等的学习,同时可以交到一大堆爱好学习的朋友,MM也有哦。

www.52cpp.cn
Cain 2005-07-12
  • 打赏
  • 举报
回复
TO: darkstar21cn(爱上小猫的小狗)(读不懂爱情所以来读程序) ( ) 信誉:99 2005-07-12 11:38:00 得分: 0


for (char* p = c; *p != 0; p++) {
cout << &p << ":" << p << endl;
}

越界了。


能不能解释的清楚一点,我刚开始学C++,这个遍历的方法是书上抄下来的

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧