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

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;这一句有什么用阿,什么意思,感觉多余的
...全文
111 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;
}

70,023

社区成员

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

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