在c++中,为什么会输出这样的结果呢?看不懂这个程序,请高手帮忙看看
sizeof xin1是10,如果源文件长度不少于10个字符,那么第10个字符就会将xin1[9]覆盖,则xin1本身10个字符没有包含结束符'\0',再向目前文件写入时,程序在将xin1的10个字符写入后会一直继续写入内存中放在xin1[10]之后的数据直到碰到0为止,而这中间的内存数据是不可知的,一般在VC里会是205,而两个字节的205连在一起,正好是汉字“烫”的代码。
其实你已经知道数组大小为10,那么你就要确保xin1[9]不要保存文件数据,在循环条件里用o<sizeof(xin1) - 1,或者干脆用o<9。循环结束后,加一句xin[9]='\0'。
外循环i=0,内循环j从0循环到1,循环两次,i=1时,j的初值为2,内循环条件不满足,所以整个嵌套循环就循环两次,输出两个结果a[0][0]和a[0][1]的值,11和29。因为是地址传递给函数的形参,在函数f里改变了数组a[i][j]的值
由于基类B定义的fun()是虚函数,所以Iclass继承的fun()同样是虚函数,虚函数的作用是实现多态,虚函数是后绑定原则,即在函数运行中确定地址,而不是在编译的时候确定。
对应各自类的地址,由于是虚函数,p1对应Bclass,p2取了obj(即lclass)的地址,p3同p2。
#include <iostream>
using namespace std;
class Bclass //基类
{ public:
Bclass(int i,int j ) { x = i; y = j; }
virtual int fun() {return 0 ; }
protected:
int x, y ;
};
class Iclass:public Bclass //派生类
{ public :
Iclass(int i, int j, int k):Bclass(i, j) { z = k; }
int fun() { return( x + y + z ) / 3; }
private :
int z ;
};
int main()
{ Iclass obj( 2, 4, 10 ); //创建派生类类对象obj
//并对其构造函数Iclass(int i, int j, int k):Bclass(i, j) { z = k; }定义
Bclass p1 = obj; //虚函数,楼上有讲
//p1就是基类
cout <<p1.fun() << endl; // 执行virtual int fun() {return 0 ; }
Bclass &p2 = obj; // 引用p2用obj初始化,反正p2就是obj,即派生类
cout <<p2.fun() << endl; //执行int fun() { return( x + y + z ) / 3; }
cout << p2.Bclass:: fun() << endl; //派生类调用基类版本同名函数
//即virtual int fun() {return 0 ; }
Bclass *p3 =&obj; //指针,不懂网上查,p3指向obj
cout << p3-> fun() << endl; //执行int fun() { return( x + y + z ) / 3; }
}
什么问题》》???
C语言,1000以内的完数,为什么会有24!!!
include<stdio.h>int main(){ int x = 2, y, z, s;printf("完数有下列数字:\\n");for (x; x <= 1000; x++){s = 0;for (y = 1; y<x; y++){z = x%y;if (z == 0){s = y + s;}}if (s == x) \/\/这部分要拿出y循环外面{printf("%d\\n", s);}}return...
C语言 逆序输出文本时为什么会每一行后面都多一行空白行?求高手解答...
首先告诉你这是正常现象。要克服的话把逆序函数改如下:void Reverse(FILE *fp){ long int flenth; char ch;\/\/这里加一个变量 fseek(fp, 0L, SEEK_END); flenth = ftell(fp); for(long int i = 1; i <= flenth; i++){ fseek(fp, -i, SEEK_END); putcha...
这个C语言的程序输出的为什么会是一串意义不明的数字?
在第二个for循环之前,需要重新让p=a;
c语言中 5\/2为什么会是0啊?
怎么会有两个,好像刚答过一个这样的。这个涉及到的东西就比较复杂了。如果你是初学的话,建议不要深究。知道%d输出会是2就可以了。其本质原理在于浮点数存储。你用printf("%f",2);得到的值是一样的0.000000 当你用%f输出2的时候, 传给printf的值就是简单的2,占4个字节,其二进制值是 0x...
c语言编程,while循环,为什么会是-1?
这道题目考的是自增自减,前置与后置的问题.y--后置,先进行使用,在进行自减 while(y--); 先进行判断,y=1的时候,while(y--) ;这个时候满足条件循环y=0;y=0 先判断不满足条件,所以退出循环,但是要做自减,所以最终y=-1;点击我头像,可以加入群 ...
c语言中 5\/2为什么会是0啊?
这个涉及到的东西就比较复杂了。如果你是初学的话,建议不要深究。知道%d输出会是2就可以了。其本质原理在于浮点数存储。你用printf("%f",2);得到的值是一样的0.000000 当你用%f输出2的时候, 传给printf的值就是简单的2,占4个字节,其二进制值是 0x00000002 而浮点数存储的时候,分符号位,...
C语言中定义int a=1.6 a为什么会是1,不应该是2吗,(int) a呢?
是应该为1,整型变量不能存储小数部分,所以会自动截取小数部分,直接取其整数值,并非是四舍五入,你可以看看C语言类型转换这一节,然后看一下整型和浮点型之间的转换就知道了。
【C语言】有没有大佬知道这个程序为什么会输出一个负数?
程序会输出负数的原因是,在这个程序中你没有对每次运算的结果进行检查,因此当乘积超出了long类型的最大值时,就会产生溢出,导致结果为负数。为了避免这个问题,你可以在每次运算后检查结果是否已经超出了long类型的范围,并在必要时退出循环。可以这样改:include<stdio.h> main(){ long i;i=chengji(...
C语言程序 第一行为什么会输出 9 1,最后一行为什么会输出0 1 。_百度...
第一行输出9就不用说了,关键是为毛输出1.宏定义就是文本替换,S(a)也就是3<9<5;逻辑判断左结合,3<9为真,故结果为1;1<5为真,故输出1;同理,往下判断~~~
c语言中scanf函数输完后为什么会自动跳行,怎样能不让他跳行
include<stdio.h> int main(){ int i;\/\/用于循环控制 char m;\/\/临时存放输入的字符 char a[10]={'0'};\/\/给数组初始化 for(i=0;i<10;i++){\/\/循环输入 多个字符并给数组赋值 printf("请输入第%d个字符:",i+1);fflush(stdin);scanf("%c",&m);a[i]=m;} for(i=0;i<10;i...
何凤清脑: 由于基类B定义的fun()是虚函数,所以Iclass继承的fun()同样是虚函数,虚函数的作用是实现多态,虚函数是后绑定原则,即在函数运行中确定地址,而不是在编译的时候确定.对应各自类的地址,由于是虚函数,p1对应Bclass,p2取了obj(即lclass)的地址,p3同p2.
石门县19534015443: c++中,这个程序为什么会输出如下结果..那些9,8之类的数字从哪来的..?
何凤清脑: 因为你用的是单引号,在输出时被cout解释成数字了,所以打印出来的是一串数字,不是你要的符号,把单引号换成双引号,以字符串形式输出.以上是推测的,手上没有电脑,你自己测试一下
石门县19534015443: 为什么这个C++程序输出结果是这样的? - ?
何凤清脑: f4 不是所有分支都有返回值返回(if条件真是有返回值,条件假时无返回值),导致在主函数中取 f4 返回值出现问题.
石门县19534015443: c++中为什么输出来是负数 - ?
何凤清脑: 这个代码分析来是你要输入一个数字a,然后输出值是 a*2^30 这在通常情况下是一个比较大得数字(根据输入的a的值而定) 所以产生了数字溢出 由于有符号的整型,第一位是用来表示符号的 你用%d,就显示成负数了
石门县19534015443: C++为什么会输出这个? - ?
何凤清脑: 因为A obj; =》调用的是构造函数A(int a = 2){init();a++;} 那么先执行init() => obj.a = 1; a++; =>局部变量a =3; 最终输出1------------ 可以如此查看:修改如下部分 A(int a = 2){init(); a++; std::cout<<a<<std::endl;} 结果是31
石门县19534015443: 大一C++期末考在即,跪求神告诉我为什么是这个输出结果 - ?
何凤清脑: 这个需要仔细分析 有两个类,class A中含有纯虚函数,所以A是一个抽象类.class B :public A,类B公有继承了类A.并且对 virtual A*copy() const virtual void out() const 两个虚函数重新实现 搞清楚继承关系后,来分析main函数 B b; 对象在产...
石门县19534015443: C++疑问,为什么会输出这结果??
何凤清脑: i=1比较,小于2然后自增1 i=2比较,不小于2退出循环,自增1 (i++,先参与运算再自增)
石门县19534015443: C++下面四行为什么是这样的输出结果,,我是新手..?
何凤清脑: 【分析】 上面的p和str都是指向第一个元素的地址,输出时一直输出到遇到第一个结尾符\0,如: 若改为:char *p="H\0ello,World!"; 则只会输出:H char str[]="V\0ery Good!";,则只会输出:V 若想输出地址.则要改为以下形式: cout<<&p<<endl; cout<<&str<<endl; 若只想输出第一个元素内容可用以下形式: cout<<*p<<endl; cout<<*str<<endl; 注意它们间的区别!对于初学者来说你可以这么记,一般输出中有“&”的输出的时候就是地址(大部分是这样的),其它的为内容,等你学到后面了慢慢地就会区分它们的.
石门县19534015443: 为什么在c语言编程的环境下会出现这种结果?fatal error C1083: Cannot open include file: 'stdio.h': No - ?
何凤清脑: 就是头文件stdio.h打不开.提示说没有这样的文件或文件目录.可能是你的C平台没有安装正确,或者你把这些文件无意删除了或其他什么原因把这个文件破坏了.它是标准输入输出文件,里面有关于输入输出和其他许多函数原型.没有了它,你调用的函数就只是个编译器“不懂”的字符串而已.所以才叫“致命错误”!