1

調査しようとした問題がありますが、探している答えが実際には見つかりません。

Cでこの方法で複数行のテキストファイルを取り込もうとしています

./{base_name} < input.txt

input.txt が含まれています

54
37
100
123
1
54

私はそれを行うことで一種の作業をしています

scanf("%[^\t]",s);

しかし、私は各数値を取得したいので、atoi() を使用して C 文字列を整数配列に解析します。私はそれを行う方法についてかなり確信が持てません。

今、私のコードは次のようになります

int main(int argc, char *argv[]){
   char str[1000];
   scanf("%[^\t]",str);
   printf("%s\n", str);
}

これを行うために argc と **argv を使用する方法、または入力を取得してその int 配列を作成する別のきちんとした方法はありますか。

私はコンパイルしています:

gcc -w --std=gnu99 -O3 -o {base_name} {file_name}.c -lm

最善の方法は、.txt ファイルとして取得し、fopen などを使用することですが、割り当てでは、入力を ./{base_name} < input.txt として取得する必要があります。

うまくいった答えがあります。それ以外には、このコードも非常にうまく機能しました。ただし、入力からの配列のサイズを定義するため、受け入れられた回答をお勧めします。どうもありがとうございました。

#include <stdio.h>
int main(){
    char s[100];
    int array[100];
    while(scanf("%[^\t]",s)==1){
        printf("%s",s);
    }
    return 0;
}
4

2 に答える 2

1

入力を単に整数として読み取らないのはなぜですか?

//test.c
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[]){
   int n;
   int i;
   int *arr;

   /*Considering first value as number of elements */
   /*Else you can declare an array of fixed size */
   fscanf(stdin,"%d",&n);
   arr = malloc(sizeof(int)*n);

   for(i=0;i<n;i++)
    fscanf(stdin,"%d",&arr[i]);


   for(i=0;i<n;i++)
    printf("%d ",arr[i]);

    free(arr);
    return 0;
}

今使用:

./test < input.txt

想定される input.txt :

6  <- no. of elements (n)
54
37
100
123
1
54
于 2013-08-26T18:57:31.693 に答える
0

このコードを試すことができます:

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

int main(int argc, char *argv) {
   FILE *file;
   int numbers[100] /* array with the numbers */, i /8 index */, j;

   if (!(file = fopen(argv[1], "r")) return -1; /* open the file name the user inputs as argument for read */

   i = 0; /* first place in the array */
   do /* read the whole file */ {
      fscanf(" %d", &(numbers[i]); /* the space in the format string discards preceding whitespace characters */
      i++; /* next position */
   }

   for (j = 0; j < i; j++) printf("%d", numbers[j]); /* print the array for the user */

   return 0;
}
于 2013-08-26T19:00:26.670 に答える