请教两个C++问题,非常感谢
问题一:“文件IN.DAT中存放有字符数”这句话中,字符数包括0吗?0是不是不属于字符?问题二:char*p;......*p=0;这里,*p=0是什么意思?可以通过指针...
问题一:“文件IN.DAT中存放有字符数”
这句话中,字符数包括0吗?0是不是不属于字符?
问题二:char *p;
...
...
*p=0;
这里,*p=0是什么意思?可以通过指针给所指变量赋值吗?
非常感谢
首先感谢各位的回答,看后我有点晕迷
原题是这样的:
文件IN.DAT中存放有字符数,函数ReadData()负责从它读取20行数存放到字符串数组inBuf[]中 —————这是问题描述中的原话
给出的程序中:
while(i<20&&fgets(inBuf[i],80,in)!=NULL)
{
p=strchr(inBuf[i],'\n');
if(p) *p=0;
i++;
}
答案给的程序中:
if(inBuf[i][j]==0) //如果inBuf中的某一个值等于0(行结束符)
我的理解:
将inBuf[i]中的回车符都赋值为0的话,如果inBuf[i]从IN.DAT中本来就读到了0,那么下面的if判断怎么保证是行结束符0而不是本身IN.DAT中的0呢?
麻烦再解答下,感谢! 展开
这句话中,字符数包括0吗?0是不是不属于字符?
问题二:char *p;
...
...
*p=0;
这里,*p=0是什么意思?可以通过指针给所指变量赋值吗?
非常感谢
首先感谢各位的回答,看后我有点晕迷
原题是这样的:
文件IN.DAT中存放有字符数,函数ReadData()负责从它读取20行数存放到字符串数组inBuf[]中 —————这是问题描述中的原话
给出的程序中:
while(i<20&&fgets(inBuf[i],80,in)!=NULL)
{
p=strchr(inBuf[i],'\n');
if(p) *p=0;
i++;
}
答案给的程序中:
if(inBuf[i][j]==0) //如果inBuf中的某一个值等于0(行结束符)
我的理解:
将inBuf[i]中的回车符都赋值为0的话,如果inBuf[i]从IN.DAT中本来就读到了0,那么下面的if判断怎么保证是行结束符0而不是本身IN.DAT中的0呢?
麻烦再解答下,感谢! 展开
展开全部
问题一:字符数不包括0,结束符'\0'的值就是0,字符'0'的值是48,是不同的。0不属于字符。
问题二:要了解指针的含义。
char *p; 就是定义一个字符类型的指针p,一般的用法有两种:
1.指向一个字符类型变量的地址,如:有一字符变量 char a = 'B';
可以这样使用: p = &a;
那么*p=0; 就相当于 a=0;
2.指向一个字符串的首地址,如:有一字符串 char a[] = "ABCD";
可以这样使用: p = a; 或者 p = &a[0]; 两者作用是相同的。
那么 *p=0; 就相当于 a[0]=0;
p如果加了1:p++; 那么此时*p=0; 就相当于 a[1]=0; 依此类推,
可见指针变量对数组操作有一定便利性。
问题二:要了解指针的含义。
char *p; 就是定义一个字符类型的指针p,一般的用法有两种:
1.指向一个字符类型变量的地址,如:有一字符变量 char a = 'B';
可以这样使用: p = &a;
那么*p=0; 就相当于 a=0;
2.指向一个字符串的首地址,如:有一字符串 char a[] = "ABCD";
可以这样使用: p = a; 或者 p = &a[0]; 两者作用是相同的。
那么 *p=0; 就相当于 a[0]=0;
p如果加了1:p++; 那么此时*p=0; 就相当于 a[1]=0; 依此类推,
可见指针变量对数组操作有一定便利性。
展开全部
1:从文件中可以读出某个数据,该数据就是所谓的“字符数”,当然,具体的存放格式可能是文本流,也就是用各个数字的ascii码存放,也可能是二进制流,就是用机器内存放数据的格式直接存放到外部存储器上。0当然也是啊
2:*p=0就是往p指向的字符型存储空间存放ascii码0,或者说赋值
2:*p=0就是往p指向的字符型存储空间存放ascii码0,或者说赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题一:问题看不明白。你意思是说把数按照字符形式存储?'0'是字符,0不是。
问题二:*p = 0就是让p指向的整型变量等于0,指针存在的意义就是访问被指的变量,如果声音时没有加上“const”,都可以。
问题二:*p = 0就是让p指向的整型变量等于0,指针存在的意义就是访问被指的变量,如果声音时没有加上“const”,都可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然字符数包括0,通俗理解就是所见的格式文本就是字符,什么标点,字母,数字等等。。都是。
至于*p=0,是C++中常用的防错手段,就是给指针赋值为0,为了防止迷途指针。。在你定义了一个指针后,不知道现阶段给什么值时就赋值为0。因为指针是对内存硬件的访问操作,必须很严格,没有赋值的指针就好比沙漠里没有指南针,不知道系统会发生什么不可预料错误。。
至于*p=0,是C++中常用的防错手段,就是给指针赋值为0,为了防止迷途指针。。在你定义了一个指针后,不知道现阶段给什么值时就赋值为0。因为指针是对内存硬件的访问操作,必须很严格,没有赋值的指针就好比沙漠里没有指南针,不知道系统会发生什么不可预料错误。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
额。。第一个问题我挺难答的。。因为我也是新手。。。不过我知道,那的确就是控制台,小程序基本上都是控制台程序- -||
至于第二个问题嘛。。。因为你用的是VC++,每次程序运行完之后是不是都有一句话
Press any key to continue 嘛。不过这是VC++的功能,你本身的程序是没有这个功能的,它只会从一开始运行到return 0; 然后呢就直接结束程序了,所以就自己关掉了。
呃。。你确定自己写的是C++哦(请原谅,最近有些人会把C语言代码当成是C++代码。。。因为他们用的是VC++,就以为写出来的就是C++程序了,可是VC++也可以写C程序的)。。。
解决的办法就是 在 return 之前加上一句
cin.get();
这个函数会要求你输入一个回车,这样就可以在程序结束前刹车了。
上面是C++的方法,以下是C的方法
用 #include<conio.h>(如果不行的话就把 conio.h 换成 cconio 前者是C的格式,后者是C++)
然后再在return语句前加上一句,getch();
效果跟用cin.get() 差不多,不过这个函数是让是你输入一个键。。。
如果在之前输出 Press any key to continue 的话,效果就跟你用VC++是一样的了。。。
不过这两个函数有些时候会失灵= =||
因为这两个函数是在缓冲区里读数据的(输入数据先到缓冲区在被程序读取),如果你的缓冲区不干净(上次输入的回车啊什么的没被读取),就会产生好像跳过这两个函数的感觉。
这种情况只需要加多一个getch(),或者cin.get() 就行了
最近我发现还有一个方法可以令程序暂停,就是用 stdlib.h (C++是cstdlib,不过一般C的风格C++也能识别)
加上 #include<stdlib.h> 在return语句前加上 system("pause");
这个指令是让你的程序暂停。
至于第二个问题嘛。。。因为你用的是VC++,每次程序运行完之后是不是都有一句话
Press any key to continue 嘛。不过这是VC++的功能,你本身的程序是没有这个功能的,它只会从一开始运行到return 0; 然后呢就直接结束程序了,所以就自己关掉了。
呃。。你确定自己写的是C++哦(请原谅,最近有些人会把C语言代码当成是C++代码。。。因为他们用的是VC++,就以为写出来的就是C++程序了,可是VC++也可以写C程序的)。。。
解决的办法就是 在 return 之前加上一句
cin.get();
这个函数会要求你输入一个回车,这样就可以在程序结束前刹车了。
上面是C++的方法,以下是C的方法
用 #include<conio.h>(如果不行的话就把 conio.h 换成 cconio 前者是C的格式,后者是C++)
然后再在return语句前加上一句,getch();
效果跟用cin.get() 差不多,不过这个函数是让是你输入一个键。。。
如果在之前输出 Press any key to continue 的话,效果就跟你用VC++是一样的了。。。
不过这两个函数有些时候会失灵= =||
因为这两个函数是在缓冲区里读数据的(输入数据先到缓冲区在被程序读取),如果你的缓冲区不干净(上次输入的回车啊什么的没被读取),就会产生好像跳过这两个函数的感觉。
这种情况只需要加多一个getch(),或者cin.get() 就行了
最近我发现还有一个方法可以令程序暂停,就是用 stdlib.h (C++是cstdlib,不过一般C的风格C++也能识别)
加上 #include<stdlib.h> 在return语句前加上 system("pause");
这个指令是让你的程序暂停。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询