为什么我的while循环被激活,但没有其他事情发生?

时间:2015-10-30 02:57:01

标签: c input while-loop

所以现在我通过执行以下操作来尝试使用stdin和输入文件:

./ a.exe< input.txt中

input.txt文件只有很多随机测试用例,所以我可以看看我是否做得对。我试图通过使用stdin从输入文件中删除一些标点符号。你会注意到我有几张印刷品在那里说"这里"。我把它放在那里看看程序是否到达。

所以每当我运行它时,我输入" ./ a.exe< input.txt",我得到" bash:input.txt:没有这样的文件或目录"。所以我喜欢......好吧,我只需输入几个随机输入来查看它是否有效。我输入了随机的单词,事实证明程序甚至没有点击我输入的任何单词./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;
}

1 个答案:

答案 0 :(得分:3)

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

您需要找出为什么 bash无法找到您的文件,例如:

  • 你在正确的目录中吗?
  • input.txt文件确实存在吗?
  • 您是否以文件名中有特殊字符(例如inpux<backspace>t.txt)的方式创建了它?

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

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

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

./a.exe arg1 arg2 arg3

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

我认为您需要弄清楚如何您想要向程序提供输入。如果是通过参数,您可以使用argv[N] 1 <= N < argc。如果是通过标准输入,您可能根本不需要关注argc/v