【问题标题】:output transfer to a new file输出传输到新文件
【发布时间】:2010-08-22 15:11:00
【问题描述】:

我对 c 完全是个菜鸟。我从网上下载了一个代码。它生成所有可能的字符组合。我想将此输出传输到文本文件。我尝试了几件事,但无法做到。有人可以建议我进行必要的更改吗?这是代码。a

编辑:我已将 put 命令更改为 fputs。我尝试了所有可能的组合。fputs(&str[1],f), fputs("&str[1]" ,"f"), fputs("&str[1]",f) 和 fputs(&str,"f") .但没有任何效果。下一步该做什么?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MINCHAR 33
#define MAXCHAR 126

char *bruteforce(int passlen, int *ntries);

int main(void) {

    int i, wdlen, counter;
    char *str;
    clock_t start, end;
    double elapsed;
    FILE *myfile;
    myfile = fopen("ranjit.txt","w");

    do {
        printf("Word length... ");
        scanf("%d", &wdlen);
    } while(wdlen<2);

    start = clock();

    bruteforce(wdlen, &counter);

    end = clock();

    elapsed = ((double) (end - start)) / CLOCKS_PER_SEC;
    fprintf(myfile,"\nNum of tries... %d \n",counter);
    fprintf(myfile,"\nTime elapsed... %f seconds\n",elapsed);
    return counter;

}

char *bruteforce(int passlen, int *ntries) {

    int i;
    char *str;
    FILE *f;
    f = fopen("sandip.txt","w");

    *ntries=0;

    passlen++;

    str = (char*)malloc( passlen*sizeof(char) );

    for(i=0; i<passlen; i++) {
        str[i]=MINCHAR;
    }
    str[passlen]='\0';

    while(str[0]<MINCHAR+1) {
        for(i=MINCHAR; i<=MAXCHAR; i++) {
            str[passlen-1]=i;
            (*ntries)++;
            fputs("&str[1]",f);
        }

        if(str[passlen-1]>=MAXCHAR) {
            str[passlen-1]=MINCHAR;
            str[passlen-1-1]++;
        }

        for(i=passlen-1-1; i>=0; i--) {
            if(str[i]>MAXCHAR) {
                str[i]=MINCHAR;
                str[i-1]++;
            }
        }
    }

    return NULL;

}

【问题讨论】:

  • 使用 GNU/Linux 或其他 posix 兼容系统?然后最简单的方法是将输出重定向到一个文件,例如 ./yourprogram > outfile.txt .. 这在 Windows 上应该也可以,但我不知道如何。
  • @Johan,它在 Windows 上的工作方式完全相同
  • 感谢大家的建议,但这种方法对我不起作用。
  • 请帮忙。自从 3 小时以来,我一直在为此苦苦挣扎。
  • 等一下,你在 fputs 中使用的这个变量 f 是什么?发布您的新代码。

标签: c combinations


【解决方案1】:

puts 替换为fputs,它将FILE* 作为第二个参数。您需要将其传递给bruteforce

【讨论】:

  • 问题编辑的家伙。我按照mathepic的建议尝试了fputs。没有任何效果。期待更多建议。
  • 我刚刚尝试在您的代码上实施我的建议,效果很好。
  • @mathepic 能否提供您尝试的语法。当我尝试 fputs 时,它停止生成输出。或者 exe 停止工作。
  • 写入大量输出需要时间。我在顶部而不是在main 中声明了static FILE* myfile;,并使用了fputs(&amp;str[1], myfile);
【解决方案2】:

对于它的价值,您可以使用 shell 重定向来创建带有输出的文件...

./myprogram > output.txt

【讨论】:

  • 这个程序的输出将作为其他程序的输入,所以我不能使用这个方法。
  • 使用管道! ./program1 | ./program2 会起作用。你也可以使用./program1 &gt; tmp &amp;&amp; ./program2 &lt; tmp
  • 我之前没有正确解释。这就像一个程序的两个功能。函数的输出将作为其他函数的输入。无法使用命令行。
猜你喜欢
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2019-01-24
  • 2010-10-11
相关资源
最近更新 更多