我正在通过K& R工作,我对我的程序输出有些疑惑, 当按Tab键而不是将tab插入char数组行时,if语句用于插入8个空白字符;然而,当我按下回车而不是获得所需的输出时,我的单词被换行而不是空格或空格分隔。 问题1.21为好奇的
/*replaces tabs from input with equal number of spaces*/
#include <stdio.h>
#define MAXLINE 1000
int getliner(int maxlen, char line[]);
int main(){
char line[MAXLINE];
int len=0;
while((len=getliner(MAXLINE, line))>0){
printf("%s\n", line);
len=0;
}
return 0;
}
/*getline: puts input in arr, returns lenght*/
int getliner(int max, char s[]){
int i, j;
char c;
for(i=0;i<max-1 && (c=getchar())!=EOF && c!='\n' && c!='\t';++i)
s[i]=c;
if((c=='\t')){
for(j=(i+8);i<j;i++)
s[i]=' ';
s[i]='\0';
}
if((c=='\n')){
s[i]='\n';
++i;
}
s[i]='\0';
return i;
}
输出的一个例子
dom dom <-- this is the input
dom <-- here is the output
dom
从我可以告诉我的代码处理换行符,不仅是换行直到输入的最后'm'之后才出现。在我看来,当按下tab时,'\ n'字符被插入到该行中,但我的代码添加了8个空格。
答案 0 :(得分:5)
您的字符串已包含换行符(您从输入中复制),但您正在打印:
printf("%s\n", line);
这增加了另一个换行符。