c - 读取一行时忽略空格或换行符

标签 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>

最佳答案

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();

关于c - 读取一行时忽略空格或换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23984129/

相关文章:

c - 闰年C程序

c - linux 内核中的 mmap() 用于访问未映射的内存

javascript - 在文本区域上设置克拉位置时如何考虑 Windows 换行符 (\r\n)?

Eclipse 无法处理 CSS3 动画

java - 如何检查 Java 字符串是否全是空格?

c++ - 在 C 中查询 A 记录

c - 使 GDB 在调用时打印函数的控制流

R - 我是否需要使用 print() 添加显式换行符?

html - 照片集底部和边框之间的空白

html - 如何删除列表图像周围的水平空间?