读取行时忽略空格或换行符

时间:2014-06-01 20:23:35

标签: c newline whitespace scanf

我正在读一行直到按下进入/返回(就像一个终端),但是我在忽略空格和输入时遇到了一些问题。

这是我阅读和检查空格/新行/评论的方式:

char line[256];
while(printf("%s>", shell_name) && scanf(" %50[^\n]", line) != EOF){
        if(isspace(*line) == 0 && line[0] != '#' && line[0] != '\n'){

输入示例:

mysh>echo lol
lol
mysh> *spaces*
mysh>
mysh> *next line(enter)*
mysh>

1 个答案:

答案 0 :(得分:2)

" "中的scanf(" %50[^\n]", line)消耗所有领先的白色空间(包括'\n'),而不仅仅是前导空格。

isspace(*line) == 0line[0] != '\n'始终是真的。

建议fgets()/sscanf()。使用第一次获取行并且然后 2)解析它时,用户输入更容易处理。

char buf[256];
if (fgets(buf, sizeof buf, stdin) == NULL) HandleEOF();
char line[256];
if (sscanf(buf, " %50[^\n]", line) < 1) Handle_WhiteSpaceOnlyLine();
GoodToGo();