打错了,字符的位置混淆了,什么是错的,循环

时间:2014-09-26 02:18:18

标签: c loops printf

Mycode打印多行,每行9个元素。如果行(第一个元素)以'd'开头,则不要打印出该行的其余元素。所以,如果你尝试ls -l | mycode会删除以'd'开头的行。但由于某些原因,元素向左移动,例如:

ls -l

drwxrwxrwx 2 alk lotus 35 Sep 23 19.00 directory1
-rwxrwxrwx 2 alk lotus 345 Sep 23 13.00 file1
drwxrwxrwx 3 alk lotus 245 Sep 23 19.20 directory2
drwxrwxrwx 24 alk lotus 15 Sep 23 12.00 directory3
-rwxrwxrwx 5 alk lotus 25 Sep 23 14.00 file2
-rwxrwxrwx 8 alk lotus 25 Sep 23 10.00 file3

ls -l | mycode

-rwxrwxrwx 2 alk lotus 345 Sep 23 13.00 
file1 -rwxrwxrwx 5 alk lotus 25 Sep 
23 14.00 file2 -rwxrwxrwx 8 alk lotus 25 Sep 
23 10.00 file3

那么为什么file2 file1会崩溃?我想要那个文件留在他的位置......之后所有职位都在那里混淆....请帮助解决这个问题...... 我的代码在这里:

2 个答案:

答案 0 :(得分:1)

代码中的逻辑似乎不正确。你想要做的是删除以d开头的行,但是在代码中它会执行其他操作。

我正在向您展示一个预期可行的示例,该示例将替换您的代码示例:

while (fgets(string, 1024, stdin))
    if (string[0] != 'd')
        printf("%s", string); // don't use puts cuz fgets would store the newline

答案 1 :(得分:1)

我不明白为什么你不仅仅使用fgets:

for (i=0; i<9;i++){
    if (NULL != fgets(string,1024,stdin)) {
        if (string[0] != 'd'){
            printf("%s\n", string);
        }
    }
    else break;
}