>

입력 파일을 가져 와서 색인을 만들고 다른 파일을 저장하려고합니다.

입력 파일을 그런 식으로 내 프로그램으로 리디렉션하면 모든 것이 제대로 작동합니다

./myprog <text.txt

그러나 argv [1]를 사용하여 명령 행에서 인수로 파일을 열려고하면 작동하지 않으며 이유를 이해할 수 없습니다

내 파일을 여는 방법으로 무언가를 추측한다

전체 코드를 게시하지만 파일을 읽을 때 문제가 코드 상단에 있다고 생각합니다

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXW 1000
#define MAXC 100

typedef struct {
    char seen[MAXC];
    char lines[1024];

} wfstruct;
int get_word_freq (wfstruct *words, size_t *idx, FILE *fp);
int compare (const void *a, const void *b);
int main (int argc, char **argv) {
printf("%d",argc);
printf("%s",argv[1]);
    /* initialize variables & open file or stdin for seening */
    wfstruct words[MAXW] = {{{ 0 }, 0}};
    size_t i, idx = 0;
FILE *fp2;
if(argc>2)
{
printf("too much args\n");
return 1;
}
if(argc<2)
{
printf("give me a file\n");
return 1;
}
FILE *fp=fopen(argv[1],"r");
get_word_freq (words, &idx, fp);



    /* sort words alphabetically */
    qsort (words, idx, sizeof *words, compare);
   fp2 = fopen("Output.txt", "w");
 fprintf(fp2, "The occurences of words are");
    printf ("\nthe occurrence of words are:\n\n");
    for (i = 0; i < idx; i++)
{
 fprintf(fp2, "  %-28s :  seen in lines %s \n", words[i].seen, words[i].lines);
        printf ("  %-28s :  seen in lines %s \n", words[i].seen, words[i].lines);
}

fclose(fp2);


    return 0;
}
int get_word_freq (wfstruct *words, size_t *idx, FILE *fp)
{
    size_t i;



    /* read each word in file */
   char *word;
    word = malloc(sizeof(char));
int now;
int line = 1;
int j=0;
for (;;j++)
{
    now=getchar();
    if(now==EOF)
    {
        break;
    }
    if(!isalpha(now)){
        word[j] = '\0';
        j=-1;
         for (i = 0; i < *idx; i++) {
            /* if word already 'seen', update 'words[i]. freq' count */
            if (strcmp (words[i].seen, word) == 0) {
          sprintf(words[i].lines + strlen(words[i].lines),"%d,",line);



                goto skipdup;   /* skip adding word to 'words[i].seen' */
            }
        } /* add to 'words[*idx].seen', update words[*idx].freq & '*idx' */
        strcpy (words[*idx].seen, word);
                     sprintf(words[*idx].lines,"%d,",line);


        (*idx)++;
    skipdup:
        if (*idx == MAXW) { /* check 'idx' against MAXW */
            fprintf (stderr, "warning: MAXW words exceeded.\n");
            break;
        }

    if(now=='\n'){
        line++;
    }
    continue;
    }
    now=tolower(now);
    word[j]=now;
    word=realloc(word,(j+1+1)*sizeof(char));
    }



    fclose (fp);
    return 0;
}
/* qsort compare funciton */
int compare (const void *a, const void *b)
{
    wfstruct *ap = (wfstruct *)a;
    wfstruct *bp = (wfstruct *)b;
    return (strcmp (ap->seen, bp->seen));
}

  • 답변 # 1

    먼저 코드를 포맷하고 두 번째로 fopen ()으로 파일을 연 후 getchar ()로 파일을 읽으려고합니다. getchar ()이 stdin에서 읽으므로 작동하지 않습니다. fopen ()으로 연 파일에서 문자를 읽으려면 fgetc ()를 사용해야합니다.

    http://www.cplusplus.com/reference/cstdio/fgetc/

    함수 get_word_freq () 변경 now=getchar();   에  와이즈 비즈

    now=fgetc(fp);

  • 이전 MySQL 쿼리는 PHP에서 null 값을 반환하지만 정상적으로 작동합니다
  • 다음 썸네일 요청을 생성하고 Azure 큐 스토리지에 큐잉