2013-09-30 92 views
0

c新手,並試圖編寫我的第一個程序,該程序將從每行文本的右側修剪空白處並返回它。編譯當我得到:編寫一個程序從C文本的右側修剪空白空間C

trim.c: In function âmainâ: 
trim.c:15:2: warning: passing argument 1 of âgetlineâ from incompatible pointer type [enabled by default] /usr/include/stdio.h:675:20: note: expected âchar ** __restrict__â but argument is of type âchar *â 
trim.c:15:2: warning: passing argument 2 of âgetlineâ makes pointer from integer without a cast [enabled by default] /usr/include/stdio.h:675:20: note: expected âsize_t * __restrict__â but argument is of type âintâ 
trim.c:15:2: error: too few arguments to function âgetlineâ /usr/include/stdio.h:675:20: note: declared here  
trim.c:15:41: error: expected expression before â:â token 
trim.c:21:27: error: expected â)â before â;â token 
trim.c:22:1: warning: passing argument 1 of âprintfâ makes pointer from integer without a cast [enabled by default] /usr/include/stdio.h:363:12: note: expected âconst char * __restrict__â but argument is of type âintâ 
trim.c:22:1: warning: format not a string literal and no format arguments [-Wformat-security] 
trim.c:22:1: error: expected â;â before â}â token trim.c: At top level: trim.c:26:6: error: conflicting types for âgetlineâ /usr/include/stdio.h:675:20: note: previous declaration of âgetlineâ was here trim.c: In function âgetlineâ: 

我的代碼是:

#include <stdio.h> 
#define MAXLINE 1000 

char line[MAXLINE]; 
int len; 

main() 
{ 
    int i; 
    int j; 
    while ((len = getline(line, MAXLINE)) > 0) 
    { 
    for (i = len; line[i] < 31; --i) 
     line[i] = 0; 
    line[i + 1] = 10; 
    for (j = 0; j <= i; j++) 
     printf(putchar(line[j])); 
    } 
} 

int getline(char s[], int lim) 
{ 
    int c, i; 

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

我在正確的軌道上?我相信編譯器引用的第一個問題與我傳遞給getline()函數的類型有關。任何信息或建議將不勝感激。

+5

「'的printf(的putchar(線[J]);'」 - 你還沒有關閉括號從'printf()',也請把你的錯誤放在代碼塊中,不要去掉換行符 –

+3

得到一些教程,給你一個程序的總體佈局,例如原型,返回值等。 –

+1

解釋第15行正在做什麼 – smac89

回答

3
  1. while((len = getline(line, MAXLINE)) > :0)我想你在line[i]意味着while((len = getline(line, MAXLINE)) > 0)
  2. for(i = len; line[i] < 31; --i)你比較line[i]的ANSI值,我不認爲這是你想要做
  3. printf(putchar(line[j]))這是什麼呢?您可以嘗試printf("%c" , line[i])putchar(line[j]),選擇一個。

編輯

函數getline的原型ssize_t getline(char **lineptr, size_t *n, FILE *stream)所以試試這個,而不是getline(line , MAXLINE , stdin)

+0

感謝您的建議....是的冒號是一個錯誤。不打算。我確實想要比較ASNI值...我在那裏做的是從行尾迭代,用nul替換每個索引,直到我到達第一個可見字符,此時我想結束循環。 – Atache

+0

@Atache「我在那裏試圖做的是從行尾迭代,用nul替換每個索引,直到我到達第一個可見字符,在這一點上」我不太明白你在嘗試什麼要做但基於你想從字符串中刪除空白的標題? –

+0

嗯,我想這會更好地描述爲不可見字符。 Horiztonal/Vertical Tabs ...我相信它們都具有小於31的ASNI值。 – Atache