程序运行无误,却无法得到结果

mailghyth 2011-06-09 11:10:42
#include <stdio.h>

#define MAXLINE 1000

int getliness(char lon[], int lim); /*获取输入的字符,存入数组并返回长度
void copyss(char to[], char from[]); /*复制数组

main()
{
int len, max;
char lon[MAXLINE];
char maxest[MAXLINE];

max = 0;
while ((len = getliness(lon, MAXLINE)) > 0)
if (len > max){
max = len;
copyss(maxest, lon);
}
if (max > 0) /*如果存在最大字符串,则输出
printf("%s", maxest);
return 0;
}

int getliness(char line[], int lim)
{
int c, i;

for (i = 0; i < lim -1 && (c = getchar() != EOF) && c != '\n'; i++)
line[i] = c;
if (c = '\n'){
line[i] = c;
++i;
}
line[i] = '\0';

return i;
}

void copyss(char to[], char from[])

{
int i;

i = 0;
while (to[i] = from[i] != '\0')
++i;
}

程序在gcc下运行无误,输入字符串若干,按下ctrl+d却无法得到结果,直接没反应,另外想问以下main()函数里的return 0;这一句有什么用阿,什么意思,感觉多余的
...全文
95 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
南京浪人甲 2011-06-10
  • 打赏
  • 举报
回复
主要是你的
while ((len = getliness(lon, MAXLINE)) > 0)
永远都会是>0,无法跳出循环,其他都是小问题,不解释。看代码:

#include <stdio.h>

#define MAXLINE 1000

int getliness(char lon[], int lim); //*获取输入的字符,存入数组并返回长度
void copyss(char to[], char from[]); //*复制数组

main()
{
int len, max;
char lon[MAXLINE];
char maxest[MAXLINE];

max = 0;
while ((len = getliness(lon, MAXLINE)) > 0)
if (len > max){
max = len;
copyss(maxest, lon);
}
if (max > 0) //*如果存在最大字符串,则输出
printf("%s", maxest);
getchar();
return 0;
}

int getliness(char line[], int lim)
{
int c, i;

for (i = 0; i < lim -1 && ((c = getchar()) != EOF) && c != '\n'; i++)
line[i] = c;
if (c == '\n'){
if (i == 0)
return 0; //这里是当一行就有一个'n'时结束输入的,
//EOF我不知道怎么搞,估计读文件时才会用到吧
else
{
line[i] = c;
++i;
}
}
line[i] = '\0';

return i;
}

void copyss(char to[], char from[])

{
int i;

i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}

AnYidan 2011-06-10
  • 打赏
  • 举报
回复
lz 只输入一个 enter, 看看int getliness(char line[], int lim)
返回值是多少?
然后单步跟踪int getliness(char line[], int lim)
玩笑 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zouyuncheng 的回复:]
(c = getchar() != EOF) 运算符优先级
if (c = '\n'){
line[i] = c;
++i;
} 回车才会把字符传给程序,所以无论你怎么输入,最后都有一个回车符传到C,,这里++i是肯定会被执行的,函数返回值至少是1,永远大于0,外层循环无法中止。
标准规定,main函数返回int类型,return 0;是返回个0给调用程序(一般来说就是你……
[/Quote]看错。悲剧
玩笑 2011-06-09
  • 打赏
  • 举报
回复
(c = getchar() != EOF) 运算符优先级
if (c = '\n'){
line[i] = c;
++i;
} 回车才会把字符传给程序,所以无论你怎么输入,最后都有一个回车符传到C,,这里++i是肯定会被执行的,函数返回值至少是1,永远大于0,外层循环无法中止。
标准规定,main函数返回int类型,return 0;是返回个0给调用程序(一般来说就是你的操作系统了),可以用于得到程序的结束原因。0一般表示正常结束
蓝染忽右介 2011-06-09
  • 打赏
  • 举报
回复
#include <stdio.h>

#define MAXLINE 1000

int getliness(char lon[], int lim); //获取输入的字符,存入数组并返回长度
void copyss(char to[], char from[]); //复制数组

int main()
{
int len, max;
char lon[MAXLINE];
char maxest[MAXLINE];

max = 0;
while ((len = getliness(lon, MAXLINE)) > 0)//here
if(len > max)
{
max = len;
copyss(maxest, lon);
}
if (max > 0) //如果存在最大字符串,则输出
printf("%s", maxest);
return 0;
}

int getliness(char line[], int lim)
{
int c, i;

for (i = 0; i < lim -1 && ((c = getchar()) != EOF)/*here*/&& c !='\n'; i++)

line[i] = c;
if (c =='\n')//here ==
{
line[i] = c;
++i;
}
line[i] = '\0';

return i;
}

void copyss(char to[], char from[])

{
int i;

i = 0;
while (to[i]=from[i] !='\0')
++i;
}
基于Matlab图像识别技术的隐形眼镜镜片边缘缺陷检测+源代码+文档说明.zip主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。实现原理如下: 使用Matlab工具,首先分别识别检测出镜片的垂直边缘和水平边缘; 然后进行求平方和并开根的处理,从而获得欧几里得边缘的结果; 其次再对边缘平方和处理后的数据筛选,并令其值为1进行二进制,得到二进制边缘结果; 最后再通过确定圆心、半径,与圆周各点做差找到缺陷。 运行结果 完整的理想图像 程序读取并识别检测完整的理想图像时,由结果可见,输出的图像清晰准确地标识出了镜片边缘的缺陷,包括部分细小的缺陷,人眼都难以分辨,而通过程序识别处理,精准无误地被标出。 不完整的图像 当输入一张不完整的图像时,程序仍能准确地获得对象的边缘,但无法计算出圆心所在和半径,因此也就无法识别出边缘缺陷。 存在较大缺陷的图像 输入的图像存在肉眼可见的较大缺陷时,程序经过计算仍然能够精准识别出缺陷并标出,未出现误判的情况。 图像存在较多噪声干扰 但待检测识别的镜片图像存在较多噪声干扰时,该程序无法正常运行,受噪点干扰无法识别出
基于Matlab图像识别技术的隐形眼镜镜片边缘缺陷检测源码.zip 【资源介绍】 该项目是个人毕设项目,答辩评审分达到95分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。 该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 ## 实现原理 1. 使用Matlab工具,首先分别识别检测出镜片的垂直边缘和水平边缘; 2. 然后进行求平方和并开根的处理,从而获得欧几里得边缘的结果; 3. 其次再对边缘平方和处理后的数据筛选,并令其值为1进行二进制,得到二进制边缘结果; 4. 最后再通过确定圆心、半径,与圆周各点做差找到缺陷。 ## 运行结果 1. 完整的理想图像 程序读取并识别检测完整的理想图像时,由结果可见,输出的图像清晰准确地标识出了镜片边缘的缺陷,包括部分细小的缺陷,人眼都难以分辨,而通过程序识别处理,精准无误地被标出。 2. 不完整的图像 当输入一张不完整的图像时,程序仍能准确地获得对象的边缘,但无法计算出圆心所在和半径,因此也就无法识别出边缘缺陷。 3. 存在较大缺陷的图像 输入的图像存在肉眼可见的较大缺陷时,程序经过计算仍然能够精准识别出缺陷并标出,未出现误判的情况。 4. 图像存在较多噪声干扰 但待检测识别的镜片图像存在较多噪声干扰时,该程序无法正常运行,受噪点干扰无法识别出镜片边缘,也无法计算标示出边缘缺陷所在。 ## 改进思路 根据4个测试的结果,可明确看出该程序在部分情况下具有一定的边缘缺陷检测识别功能,能精准识别并标示出缺陷位置所在,但在图像不完整以及有噪声干扰的情况下无法正常工作,故提出以下改进措施。 1). 针对图像不完整情况下无法识别出圆心以及半径的问题,在已知的部分圆弧上取四个点,两两分别连线并求其线段的角平分线,则这些线的交点位置就是圆心,进而就可以轻松获得对象的圆心位置和半径。 2). 针对图像有较大噪声干扰导致无法识别出边缘的问题,在进行垂直边缘和水平边缘识别之前,加入噪声过滤的处理。通过均值滤波、中值滤波和高斯加权均值滤波模版对图像的像素点进行处理,从而排除噪声对识别的影响,之后再进行正常的边缘缺陷识别流程。 ## 总结 根据实验结果可知,对于隐形眼镜镜片的边缘缺陷检测这一问题,本文使用的程序能在一定情况下做到精准的识别以及对缺陷的标识,但在部分情况下无法正确识别,不能完全应对所有可能的情况,具有一定的改进提升空间。与此同时,本文也针对程序无法完成识别检测的情况提出了对应的优化改进策略,并且在后续的研究中进行实践,进一步提升该程序在镜片边缘检测上的准确性以及鲁棒性。
SmartCORBA 是一个ACE/TAO的改进产品;她是我们中间件的一个副产品;简化了其在网络环境中的配置难度;提供嵌入ORB级别的API,使开发人员轻松注册、管理和获得有关服务;SmartCORBA使得开发企业级别的网络程序成为一种易事。容易的配置环境使得CORBA在Windows平台上成为一种轻松;既可以制作简单的应用服务程序,也支持标准的CORBA服务:命名服务、事件服务、通知服务等 随着SmartCORBA的使用,可以将你尽快的带入到企业分布式开发的最前沿; SmartCORBA全部的C++代码完成;具备C++所有的特点;基于TAO的标准CORBA开发工程。 现阶段的开发环境和运行环境: 开发环境: 操作系统是Win32的Microsoft Windows 9x, NT, 2000 & XP 编译工具:使用Microsoft Visual C++ 5-6 在你使用该SDK之前;你可以下载演示程序,运行,评估一下,是否是你需要的企业级别的分布式计算环境。 分布式程序还是需要一个熟悉本地环境、极高效率、拥有广泛支持的语言C++说了算才能够真正广泛使用开来的。 2003年3月20日 将最新的TAO编译完成;更新了SmartCORBA的全部连接;加入必要的文档,真正的形成一个SDK;;;; 强调一点:运行前,注意将TAOACE_wrappersin添加到系统路径上,以便可以访问到必要的DLL文件。 该版本的运行网络:企业的局域网能连接机器之间可以使用; 2003年3月26日 修改了在ADSL上运行的错误,3月20日的版本在企业的局域网上运行无误;添加了一个单向访问的例子;修改了命名服务例子的错误; SmartCORBA的SDK 更新日期: 增加了很多Notification_Service的例子 改善了SDK的文件结构,详情察看readme文件。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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