【问题标题】: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 开发人员的嘲笑:-)

标签: c input while-loop


【解决方案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”。对不起,伙计们犯了一个简单的错误。
猜你喜欢
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 2021-04-02
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 2017-09-16
相关资源
最近更新 更多