这个程序能够成功编译,但是为什么无法执行??(自定义函数运行非法操作)

chenshaoju 2004-11-21 03:52:18
/*教科书上的题目是:
写一个函数 int mod(int x,int y),来计算并输出整数 x/y 的商数和余数.
以下是程序:
*/

#include<stdio.h>
#include<stdlib.h>
int mod(int,int);
int main(void)
{
system("CLS");
printf("Please Input Data X:");
int x,y;
scanf("%d",x);
printf("Please Input Data Y:");
scanf("%d",y);
mod(x,y);
system("PAUSE");
}
int mod(int x,int y)
{
float a,b;
a=x/y;
b=x%y;
printf("Data 1 Output is: %f",a);
printf("Data 2 output is: %f",b);
}



/*但是运行的结果出乎意料,一下子非法操作了,日志查看器中有以下记录:

事件类型: 错误
事件来源: Application Error
事件种类: (100)
事件 ID: 1000
日期: 2004-11-21
事件: 15:36:43
用户: N/A
计算机: SHAOJU-CHEN
描述:
错误应用程序 P156N04.exe,版本 0.0.0.0,错误模块 msvcrt.dll,版本 7.0.3790.0,错误地址 0x00031d50。



有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
数据:
0000: 41 70 70 6c 69 63 61 74 Applicat
0008: 69 6f 6e 20 46 61 69 6c ion Fail
0010: 75 72 65 20 20 50 31 35 ure P15
0018: 36 4e 30 34 2e 65 78 65 6N04.exe
0020: 20 30 2e 30 2e 30 2e 30 0.0.0.0
0028: 20 69 6e 20 6d 73 76 63 in msvc
0030: 72 74 2e 64 6c 6c 20 37 rt.dll 7
0038: 2e 30 2e 33 37 39 30 2e .0.3790.
0040: 30 20 61 74 20 6f 66 66 0 at off
0048: 73 65 74 20 30 30 30 33 set 0003
0050: 31 64 35 30 1d50


*/
...全文
141 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenshaoju 2004-11-22
  • 打赏
  • 举报
回复
谢谢newegg2002兄,问题已经按照您的内容运行成功了~谢谢~
newegg2002 2004-11-21
  • 打赏
  • 举报
回复
..........
system("CLS");
printf("Please Input Data X:");
int x,y;
scanf("%d",&x);
printf("Please Input Data Y:");
scanf("%d",&y);
mod(x,y);
system("PAUSE");
......
注意模零和除数为零的情况,,
还有,,a,b 为int 型足矣,不用是浮点型,,,
iam500jun 2004-11-21
  • 打赏
  • 举报
回复
你的scanf函数的参数有问题。应该为
scanf("%d",&x);
scanf("%d",&x);
或者定义为指针,就不要取地址符号了。


chenshaoju 2004-11-21
  • 打赏
  • 举报
回复
仍然不行,还是非法操作。
Dev-C++编译器Debug反馈信息为:
程序产生一个访问违例(段异常)
以下为Windows事件日志:
事件类型: 错误
事件来源: Application Error
事件种类: (100)
事件 ID: 1000
日期: 2004-11-21
事件: 16:12:09
用户: N/A
计算机: SHAOJU-CHEN
描述:
错误应用程序 P156N04-1.exe,版本 0.0.0.0,错误模块 msvcrt.dll,版本 7.0.3790.0,错误地址 0x00031d50。

有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
数据:
0000: 41 70 70 6c 69 63 61 74 Applicat
0008: 69 6f 6e 20 46 61 69 6c ion Fail
0010: 75 72 65 20 20 50 31 35 ure P15
0018: 36 4e 30 34 2d 31 2e 65 6N04-1.e
0020: 78 65 20 30 2e 30 2e 30 xe 0.0.0
0028: 2e 30 20 69 6e 20 6d 73 .0 in ms
0030: 76 63 72 74 2e 64 6c 6c vcrt.dll
0038: 20 37 2e 30 2e 33 37 39 7.0.379
0040: 30 2e 30 20 61 74 20 6f 0.0 at o
0048: 66 66 73 65 74 20 30 30 ffset 00
0050: 30 33 31 64 35 30 031d50
Leaveye 2004-11-21
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
int mod(int,int);
int main(void)
{
system("CLS");
printf("Please Input Data X:");
int x,y;
scanf("%d",x);
printf("Please Input Data Y:");
scanf("%d",y);
mod(x,y);
system("PAUSE");
return 0;
}
int mod(int x,int y)
{
float a,b;
a=x/y;
b=x%y;
printf("Data 1 Output is: %f",a);
printf("Data 2 output is: %f",b);
return 0;
}


追加两个返回值
下载代码方式:https://pan.quark.cn/s/d5321a99c521 在信息技术网络架构领域,配置双块网卡于同一网络段内的静态路由是一项高级且具有实用价值的技术,其能够高效地管理和优化网络数据流,保障数据包能够沿最优路径传送,同时合理分配与控制内外网络资源的访问。本资料将详细阐述双块网卡同网络段静态路由的核心概念、配置机制及其应用实例。 ### 双块网卡同网络段静态路由概述 双块网卡同网络段静态路由指的是在一台主机上部署两个或更多网络接口卡(NICs),这些网卡可能接入同一个物理网络或不同的物理网络,但它们的IP地址归属于同一个网络段。在这种配置下,主机能够同时作为多个子网的成员,并通过静态路由表来引导数据包的传输路径。静态路由是由网络管理者手动设定的,它不依赖于动态路由协议,因而具备更高的稳定性和安全性。 ### 配置机制 在双块网卡同网络段静态路由的应用场景中,关键环节在于为各个网卡设定正确的默认网关与子网掩码,以及确立通往特定目标网络的静态路由条目。具体而言,每块网卡都必须拥有独立的IP地址和子网掩码,而默认网关则用于转发那些需要进入外部网络的数据包。此外,通过增设静态路由条目,可以明确指定某些特定目的地址的数据包应经由哪块网卡进行发送。 ### 实际操作流程 以下是从相关内容中总结出的实际操作流程: 1. **环境初始化**:确认两块网卡已正确安装,并配置了相应的IP地址与子网掩码。例如,一块网卡的IP地址为192.168.1.200,另一块为192.168.1.219,均属于192.168.1.0/24网络段。 2. **删除现有路由**:运用`routedelete 0.0.0.0`指令移除所有默认路由,以确保后续配置不会受到干扰。...

33,315

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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