我试图解析ls -l输出以检查文件权限和大小。但是,似乎scanf()函数在空格后不会占用任何内容。这有什么技巧或解决方法吗?我想坚持使用scanf,但如果不可能,那么我愿意接受建议。当我运行下面的程序并仅打印test2"总计"得到了存储。
<#include stdio.h>
int main(int argc, char **argv){
char test[200];
char test2[200];
scanf("%c\n", test);
for(int i = 0; i < 9 ; i++){
if(test[i] != '\n'){
test2[i] = test[i];
}
}
for (int i = 0; i < 9; i++){
printf("%c\n", test2[i]);
}
return 0;
}
感谢。还有一种方法可以使用ls -l?
来检查某些内容是文件还是目录答案 0 :(得分:1)
然而,似乎scanf()函数在空格后不会占用任何内容。 ......
scanf("%c\n", test);
它不是scanf()
,而是使用的格式。 scanf("%c\n", test);
将char
扫描到test
(测试不一定是空字符终止),然后扫描并抛出任何空白区域。它会继续这样做,直到找到非白色空间。
您更希望{1}} 1)扫描并丢弃空白区域,2)扫描最多199个非scanf(" %199[^\n]", test); fgetc(stdin);
。 3)在满,EOF或'\n'
检测到时停止。然后扫描并抛出下一个字符。
总的来说。最好使用'\n'
fgets()
要明确的是,if (fgets(test, sizeof test, stdin) == NULL) Handle_EOF();
test[strcspn(test, "\n")] = 0; // lop off potential \n.
for (size_t i = 0; test[i]; i++){
printf("%c\n", test[i]);
}
不是邪恶的,它只是试图做很多事情(IO和转换)。最好分开。
大多数scanf()
格式说明符和指令scanf()
不区分空格和' '
。该行结尾对您的代码至关重要。 '\n'
寻找fgets()
并像其他任何'\n'
一样对待空格。
答案 1 :(得分:0)
感谢。还有一种方法可以使用ls -l检查某些文件或目录是什么吗?
第一行以&#39; total&#39;开头并且可以丢弃。
以下每一行(使用fgets()读取每一行) 以&#39;权限开头#39;
权限的第一个字符表示文件的类型:
'd' directory, 'c' character oriented device, 'b' block oriented device, '-' normal file, 'p' for named pipes, 's' for socket, 'D' for interprocess communication between client and server (solarus UNIX only) 'l' symbolic link
答案 2 :(得分:0)
你也可以尝试格式化的scanf功能,它允许你指定你期望的输入格式。