为啥我的 while 循环被激活,但没有其他反应?

Posted

技术标签:

【中文标题】为啥我的 while 循环被激活,但没有其他反应?【英文标题】:Why is my while loop activated, but nothing else happens?为什么我的 while 循环被激活,但没有其他反应? 【发布时间】:2016-01-30 09:41:06 【问题描述】:

所以现在我正在尝试通过执行以下操作来处理标准输入和输入文件:

./a.exe

input.txt 文件只是有很多随机测试用例,所以我可以看看我这样做是否正确。我试图通过使用标准输入从我的输入文件中删除一些标点符号。你会注意到我有几个 printf 躺在那里说“这里”。我把它放在那里看看程序是否到达它。

所以每当我运行它时,我都会输入“./a.exe

谁能解释我为什么会出现这些错误?

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main (int argc, char *argv[])

    char textin[80], wordout[80];
    int i, j;
    int count = 0;

    printf("%d", argc);
    while (count != argc)
    
        scanf("%s", textin);
        if (strcmp(textin, ".") == 0)
            printf("here");
        printf("here2");

        strcpy(wordout, textin);
        for (i = 0 ; i < strlen(wordout) ; i++) 
        
            if (wordout[i] == '.'  ||  wordout[i] == ','  ||
                wordout[i] == '"'  ||  wordout[i] == ';'  ||
                wordout[i] == '!'  ||  wordout[i] == '?'  ||
                wordout[i] == '('  ||  wordout[i] == ')'  ||
                wordout[i] == ':')
            
                for (j = i ; j < strlen(wordout) - 1 ; j++)
                    wordout[j] = wordout[j + 1];
                wordout[j] = '\0';
            
            printf("here3");
        
        printf("%s\n", wordout);
        count++;
    
    return 0;

【问题讨论】:

尝试添加input.txt的完整路径然后回复! for (i=0; i&lt;strlen(wordout); i++) 非常非常非常糟糕和常见的初学者或 php 程序员错误。 strcmp(textin,".") == 0 -> *textin == '.',您也可以使用switch 代替if CygWin?否则,您的可执行文件上的exe 后缀可能会引起更多经验丰富的 UNIX 开发人员的嘲笑:-) 【参考方案1】:

第一个问题与您的程序无关,您得到的错误是bash 错误,试图打开input.txt 以连接到您的a.exe 程序的标准输入。这发生在您的代码甚至开始运行之前。

你需要弄清楚为什么bash找不到你的文件,比如:

您在正确的目录中吗? input.txt 文件真的存在吗? 您是否以文件名中有特殊字符(如inpux&lt;backspace&gt;t.txt)的方式创建它?

关于另一个问题,您似乎正在使用两种不同方法从用户那里获取信息的混搭。

这两个方法是传递给程序的参数 (argc/v) 和标准输入 (scanf())。

可能您正在运行您的代码,例如:

./a.exe arg1 arg2 arg3

并期待它对他们做点什么。不幸的是,循环中的scanf() 只会等待您在终端上输入一些内容,因此它可能看起来已经挂起。

我认为您需要弄清楚如何将输入呈现给程序。如果是通过参数,您将使用argv[N] where 1 &lt;= N &lt; argc。如果是通过标准输入,你可能根本不需要关心argc/v

【讨论】:

哇。好的,所以我输入了ls,发现我的输入文件实际上命名为“input.txt.txt”。对不起,伙计们犯了一个简单的错误。

以上是关于为啥我的 while 循环被激活,但没有其他反应?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的循环中的异步委托没有等待

为啥while循环不退出?

为啥 cellForRowAtIndexPath 没有被触发,但其他方法被触发了?

While 循环与 || 一起使用但不是&&,不明白为啥?

为啥我的 while 循环结束了?

为啥循环条件内的 iostream::eof 被认为是错误的(即 `while (!stream.eof())`)?