程序证明了一串文字。这是我的代码(main是justify.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 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 :(得分:1)
您正在尝试编译Codeblocks项目文件,该文件应该是
在项目目录中调用<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...
进行编译以启用所有警告并修复发出的任何编译器警告,因为它们可能意味着错误。
答案 1 :(得分:0)
尝试使用此
进行编译 gcc -o justify justify.c line.c word.c -I.