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

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;这一句有什么用阿,什么意思,感觉多余的
...全文
113 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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;
}
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的数字基带传输的全部仿真文件,测试无误,升余弦滚降滤波器+使用说明文档.rar 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!

70,023

社区成员

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

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