2015-09-06 48 views
0

我做了一个程序,然后我用它从它的输出创建一个文件,现在我想让几个程序之一运行重定向该文件(或管道输出其他方案)。 我用下面的代码作为用于测试的第一程序错误管道/从窗口中的文件或命令重定向

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

    long long int n = 0; 
    char str[100]; 

    while (str != NULL) 
    { 
     fscanf(stdin,"%s\0", str); 
     printf("%lld\t%s\n", n, str); 

     n++; 
    } 

    return 0; 

} 

程序正确地执行,直到重定向的文件或管道输出的最后一行,然后保持无限repearing直到我停止与CTRL-C执行(视窗)。 我不知道为什么会发生这种情况,我尝试刷新标准输入,标准输出以及所有我想到的并且没有运气的东西。

我做错了或失踪?

在此先感谢。

+0

'str!= NULL'永远不会是错误的。查看scanf文档以查看错误/流结束条件的情况。 – Mat

回答

0
while (str != NULL) 
{ 
    fscanf(stdin,"%s\0", str); 
    printf("%lld\t%s\n", n, str); 

    n++; 
} 

取代

while (scanf("%s", str) != EOF) 
{ 
    printf("%lld\t%s\n", n, str); 
    n++; 
} 

问题解决了。

1
char str[100]; 
while (str != NULL) 

str被视为一个指针阵列中的第一个字符,所以其值从不改变,这意味着循环不会终止。

+0

改变条件来检查scanf的返回值也是一样的结果。 – SJPRO

+0

检查为!= EOF。解决了,谢谢! – SJPRO