任务是从输入行的末尾删除空格和制表符,以保持行数。不能使用字符串库。我已经完成了所有我可以拥有的并且仍然在输出文件中,在第一行结束时有0920(使用八进制转储od -x trim.out)任何想法它还有什么问题呢?
#define LINELIM 1000
int getLine(char s[], int lim);
int main (void){
int len, i;
char line1[100];
while ((len = getLine(line1, LINELIM)) >0){
for (i=len-2; i>=0; i--){
if (line1[i] == ' ' || line1[i] == '\t' || line1[i] == '\n'){
// professor says it is always true for some reason
line1[i] = '\0';
}
else break;
}
if(line1[0]) // not a blank
printf(" %s\n", line1);
}
return 0;
}
/*getline: read a line into s, return length*/
int getLine(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;
}
答案 0 :(得分:1)
首先,您必须包含标题<stdio.h>
:
#include <stdio.h>
如果使用第二个参数等于LINELIM
getLine(line1, LINELIM)
然后line1
必须定义相同的大小
char line1[LINELIM];
至于我,我会用以下方式重写函数getline
:)
int getLine( char s[], int lim )
{
int c;
int i = 0;
while ( i < lim - 1 && ( c = getchar() ) != EOF && ( s[i++] = c ) !='\n' );
s[i] = '\0';
return i;
}
main中的主循环可以写成
while ( ( len = getLine( line1, LINELIM ) ) > 0 )
{
int i = len;
while ( i != 0 && ( line1[i-1] == ' ' || line1[i-1] == '\t' || line1[i-1] == '\n' ) ) --i;
line1[i] = '\0';
if ( line1[0] ) printf( "%s\n", line1 );
}
你应该在while循环中从main移动i
的声明,因为除了while循环之外,变量不会在main中的任何地方使用。
至于您的代码,然后将i
设置为len - 2
是不正确的。
for (i=len-2; i>=0; i--){
^^^^^^
我们假设line1
仅包含换行符'\n'
。在这种情况下,len
等于1
,因此我将等于-1
。因此,不会删除尾随的新行字符。