为啥我的 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<strlen(wordout); i++)
非常非常非常糟糕和常见的初学者或 php 程序员错误。 strcmp(textin,".") == 0
-> *textin == '.'
,您也可以使用switch
代替if
。
CygWin?否则,您的可执行文件上的exe
后缀可能会引起更多经验丰富的 UNIX 开发人员的嘲笑:-)
【参考方案1】:
第一个问题与您的程序无关,您得到的错误是bash
错误,试图打开input.txt
以连接到您的a.exe
程序的标准输入。这发生在您的代码甚至开始运行之前。
你需要弄清楚为什么bash
找不到你的文件,比如:
input.txt
文件真的存在吗?
您是否以文件名中有特殊字符(如inpux<backspace>t.txt
)的方式创建它?
关于另一个问题,您似乎正在使用两种不同方法从用户那里获取信息的混搭。
这两个方法是传递给程序的参数 (argc/v
) 和标准输入 (scanf()
)。
可能您正在运行您的代码,例如:
./a.exe arg1 arg2 arg3
并期待它对他们做点什么。不幸的是,循环中的scanf()
只会等待您在终端上输入一些内容,因此它可能看起来已经挂起。
我认为您需要弄清楚如何将输入呈现给程序。如果是通过参数,您将使用argv[N]
where 1 <= N < argc
。如果是通过标准输入,你可能根本不需要关心argc/v
。
【讨论】:
哇。好的,所以我输入了ls,发现我的输入文件实际上命名为“input.txt.txt”。对不起,伙计们犯了一个简单的错误。以上是关于为啥我的 while 循环被激活,但没有其他反应?的主要内容,如果未能解决你的问题,请参考以下文章