2016-08-18 42 views
0

程序证明了一串文本。这里是我的代码(主要是justify.c):在GCC中编译C文件时出错(一个文件中有多个文件)

justify.c

#include <string.h> 
#include "line.h" 
#include "word.h" 

#define MAX_WORD_LEN 20 

int main(void) 
{ 
    char word[MAX_WORD_LEN+2]; 
    int word_len; 

    clear_line(); 
    for(;;) 
    { 
     read_word(word, MAX_WORD_LEN+1); 
     word_len = strlen(word); 
     if(word_len ==0) 
     { 
      flush_line(); 
      return 0; 
     } 
     if (word_len >MAX_WORD_LEN) 
      word[MAX_WORD_LEN]='*'; 
     if(word_len + 1 > space_remainding()) 
     { 
      write_line(); 
      clear_line(); 
     } 
     add_word(word); 
    } 
} 

line.c

#include <stdio.h> 
#include <string.h> 
#include "line.h" 

#define MAX_LINE_LEN 60 

char line[MAX_LINE_LEN+1]; 
int line_len=0; 
int num_words=0; 

void clear_line(void) 
{ 
    line[0]='\0'; 
    line_len=0; 
    num_words=0; 
} 

void add_word(const char *word) 
{ 
    if(num_words>0) 
    { 
     line[line_len]= ' '; 
     line[line_len+1]= '\0'; 
     line_len++; 
    } 
    strcat(line,word); 
    line_len += strlen(word); 
    num_words++; 
} 

int space_remainding(void) 
{ 
    return MAX_LINE_LEN - line_len; 
} 

void write_line(void) 
{ 
    int extra_spaces, spaces_to_insert, i,j; 

    extra_spaces= MAX_LINE_LEN - line_len; 
    for(i=0; i< line_len; i++) 
    { 
     if(line[i] != ' ') 
      putchar(line[i]); 
     else 
     { 
      spaces_to_insert = extra_spaces/ (num_words - 1); 
      for(j=1; j<=spaces_to_insert +1; j++) 
       putchar(' '); 
      extra_spaces -= spaces_to_insert; 
      num_words--; 
     } 
    } 

    putchar('\n'); 
} 

void flush_line(void) 
{ 
    if (line_len > 0) 
     puts(line); 
} 

word.c

#include <stdio.h> 
#include "word.h" 

int read_char(void) 
{ 
    int ch= getchar(); 

    if (ch=='\n' || ch == '\t') 
     return ' '; 
    return ch; 
} 

void read_word(char *word, int len) 
{ 
    int ch, pos=0; 

    while((ch=read_char()) == ' ') 
      ; 
    while(ch != ' ' && ch !=EOF) 
    { 
     if (pos<len) 
      word[pos++]=ch; 
     ch= read_char(); 
    } 
    word[pos]= '\0'; 
} 

line.h

#ifndef LINE_H 
#define LINE_H 

void clear_line(void); 

void add_word(const char *word); 

int space_remainding(void); 

void write_line(void); 

void flush_line(void); 

#endif // LINE_H 

word.h

#ifndef LINE_H 
#define LINE_H 
void clear_line(void); 

void add_word(const char *word); 

int space_remainding(void); 

void write_line(void); 

void flush_line(void); 

#endif // LINE_H 

当我编译所有这些代码块中它给了我没有错误。但是,当我做同样的GCC

的gcc -o证明justify.c line.c word.c

我得到这个:

justify.c:1:1: error: expected identifier or '(' before '<' token 
<?xml version="1.0" encoding-"UTF-8" standalone="yes" ?> 

我不能发现错误,我一直盯着这几个小时。请 我真的很感谢任何帮助,我可以得到。

+0

看来你的编译器或'string.h'在你的操作系统中出了问题。尝试'g ++'而不是'gcc',如果这不起作用,我会尝试升级(重新安装)gcc – VolAnd

回答

0

尝试编译这个

gcc -o justify justify.c line.c word.c -I.

1

您试图编译代码块的项目文件,这应该是 称为项目目录<project_name>.chp,是一般形式的XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<CodeBlocks_project_file> 
    <FileVersion major="1" minor="6" /> 
    <Project> 
    ... 
    </Project> 
</CodeBlocks_project_file> 

你的文章没有透露你是如何犯这个奇怪的错误的。可能是因为你通过某种方式将.cbp文件的内容复制到justify.c,或者通过将.cbp文件移动到justify.c或其他更加模糊的内容来破坏项目。

如果放在同一个目录下,您发布的五个文件将会编译并且无错地链接 (尽管没有编译器警告)。

gcc -o justify justify.c line.c word.c 

在该目录中运行。

只要确保源文件和头文件已保存并且具有运行时所期望的内容即可。事先用Codeblocks之外的其他编辑器打开并检查它们。

当然,您应该编译gcc ...-Wall...以启用所有警告并修复发布的任何编译器警告,因为它们可能意味着错误。

+0

谢谢你是这个问题。我只是将所有东西都复制到记事本中,然后放在一个文件夹中,然后从那里进行编译,现在就可以运行。 – tadm123

+0

@ tadm123欢迎来到Stackoverflow。为了表明答案可以解决您的问题,并且不需要更多答案,请在答案左侧勾选复选标记。请参阅[如何接受答案](http://stackoverflow.com/help/accepted-answer)。 –