我正在读一行直到按下进入/返回(就像一个终端),但是我在忽略空格和输入时遇到了一些问题。
这是我阅读和检查空格/新行/评论的方式:
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>
答案 0 :(得分:2)
" "
中的scanf(" %50[^\n]", line)
消耗所有领先的白色空间(包括'\n'
),而不仅仅是前导空格。
isspace(*line) == 0
和line[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();