所以现在我通过执行以下操作来尝试使用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;
}
答案 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
。