我一直在读一行直到按下输入/返回(就像一个终端),但是我在忽略空格和输入时遇到了一些问题。
这是我阅读和检查空格/换行/评论的方式:
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>
最佳答案
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();
关于c - 读取一行时忽略空格或换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23984129/