C 项目获奖';t在Ubuntu 12.04和Windows XP上运行

C 项目获奖';t在Ubuntu 12.04和Windows XP上运行,c,eclipse,windows,ubuntu,C,Eclipse,Windows,Ubuntu,在安装了Eclipse和CB之后,我遇到了几个无法正确启动的项目。我认为这是因为我使用的操作系统,这就是为什么我切换到Ubuntu。然而,我尝试运行的一些程序仍然无法正常运行。例如,clc wiki中的此代码在按下Enter键时不输出任何内容: #include <stdio.h> #define MAXLINE 40 /* maximum input line size */ int getlines(char line[], int maxline); void copy(ch

在安装了Eclipse和CB之后,我遇到了几个无法正确启动的项目。我认为这是因为我使用的操作系统,这就是为什么我切换到Ubuntu。然而,我尝试运行的一些程序仍然无法正常运行。例如,clc wiki中的此代码在按下Enter键时不输出任何内容:

#include <stdio.h>
#define MAXLINE 40 /* maximum input line size */

int getlines(char line[], int maxline);
void copy(char to[], char from[]);

/* print longest input line */
int main()
{
int c;
int len;    /* current line length */
int max;    /* maximum length seen so far */
char line[MAXLINE];     /* current input line */
char longest[MAXLINE];  /* longest line saved here */

max = 0;

while ((len = getlines(line, MAXLINE)) > 0) {
    if (line[len-1] != '\n')
        while ((c = getchar()) != EOF && c != '\n')
            ++len;

    if (len > max) {
        max = len;
        copy(longest, line);
    }
}

if (max > 0) {    /* there was a line */
    printf("Longest line with %d characters:\n", max);
    printf("%s ...\n", longest);
}

return 0;
}

/* getline: read a line s, return length */
int getlines(char s[], int lim)
{
int c, i;

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

return i;
}

/* copy: copy 'from' into 'to'; assume to is big enough */
void copy(char to[], char from[])
{
int i;

i = 0;
while ((to[i] = from[i]) != '\0')
    ++i;
}
#包括
#定义MAXLINE 40/*最大输入行大小*/
int getlines(字符行[],int maxline);
无效副本(字符到[],字符从[]);
/*打印最长输入行*/
int main()
{
INTC;
int len;/*当前线路长度*/
int max;/*到目前为止看到的最大长度*/
字符行[最大行];/*当前输入行*/
字符最长[MAXLINE];/*保存在此处的最长行*/
max=0;
而((len=getlines(line,MAXLINE))>0){
如果(第[len-1]行)!='\n')
而((c=getchar())!=EOF&&c!='\n')
++len;
如果(长度>最大值){
max=len;
副本(最长,行);
}
}
如果(max>0){/*有一条线*/
printf(“包含%d个字符的最长行:\n”,最大值);
printf(“%s…\n”,最长);
}
返回0;
}
/*getline:读取一行s,返回长度*/
int getlines(字符s[],int lim)
{
int c,i;
对于(i=0;i
如果我们在XP中运行它,也会遇到类似的问题。然而,如果我们在中编译相同的代码,那么一切都是完美的

安装了gcc和g++以及mingw for Windows

你能告诉我问题出在哪里吗

按Enter键时,此代码不输出任何内容

这是代码的正确行为。它被设计为在按下回车键时不打印任何内容

该代码尤其需要文件结束指示。如果您的程序从文件中读取数据(就像在ideone上一样),则文件结束指示或多或少会自动发生。如果您的程序从计算机键盘读取数据(如以交互方式运行时),则必须提供文件结束指示

要练习您提供的代码,请执行以下操作:

在Linux上,从键盘上输入几行不同长度的代码,每行后面跟着enter。然后在一行中输入CONTROL-D


在Windows上,从键盘输入几行不同长度的行,每行后跟enter。然后在一行中单独输入CONTROL-Z。

您能理解此代码吗?你知道它的预期输入和输出是什么吗?你知道如何正确运行它吗?与这个问题不太相关,但你编写自己的
copy
方法而不使用
string.h
strcpy
strncpy
?亲爱的Lee Duhem,不幸的是,我没有完全理解代码,也就是说,我不能一个人把它全部写下来。我认为输入是我输入的所有东西。如果我在构建项目(如CB)后按下运行按钮,我是否正确运行了它?亲爱的Powerlord,我认为这对我来说是一个练习。亲爱的Rob,非常感谢您抽出时间。它起作用了。“我真的为我的直言不讳感到抱歉。”德利-不需要道歉。我很高兴我能帮忙。如果我的答案或任何其他答案满足您的问题,请单击答案旁边的复选标记“接受”。