这个学期开始了C,并努力将java的知识转换为C.代码编译并运行但不是我想要的。任务是编写一个逐行读取文本文件的代码(我有一个获取行函数)并输出新的文本文件保持行格式相同(意味着如果原始文件有4行输出文件必须有4行)但删除尾随字符(空格和\ t)。我花了很多时间捣乱这件事没有成功。 感谢任何帮助。
hw2_execcise_1。程序从每行输入中删除尾随空白和制表符,并删除完全空行。
Pseudo ::: while(有行读) 找到第1行的结尾(\ n) 保存长度 从线的末端开始 查找不是空格或制表符的字符 并在找到char后插入\ n。
#include <stdio.h>
#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; i>=0; i--){
if ((line1[i] == ' ') || (line1[i] == '\t')){
line1[i] = '\n';
}
else break;
}
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 :(得分:2)
while ((len = getLine(line1, LINELIM)) >0){
for (i=len-1; i>=0; i--){//-1 for 0 origin
if(line1[i] == ' ' || line1[i] == '\t' || line1[i] == '\n'){//add case of '\n'
line1[i] = '\0';//newline add print part
}
else break;
}
if(line1[0])//not blank line
printf("%s\n", line1);
}
答案 1 :(得分:0)
代码的主要逻辑问题是
1)getline函数使用(\ n)'\ 0'或'\ 0'
终止每个输入行2)主函数检查空格或制表符时不检查换行符。 I.E.它还需要检查换行符 - 或 - getline()不应该包含换行符