2017-10-29 19 views
0

数字をある基数から別の基数に変換するプログラムを書く必要があります。 私はユーザーの入力を以下の形式で取得する必要があります。<original base><new base><number in original base>cでのfgetsの使用

私はscanfを使用することはできません。また、行の大きさを想定することもできません。 私は既にfgets()を使ってみましたが、サイズを制限することなく使用する方法はわかりません。私は何をすべきかのアイデアを得たいと思っています。ありがとう。

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

int BaseChanger() 
{ 
    char input[12]; 
    printf("enter the original base, new base ,number"); 
    fgets(input, 12, stdin); 
} 
+2

@ Efrat.shp固定サイズの配列を動的に割り当てます。 fgetsの呼び出しの後にarryが新しい行の文字を含んでいない場合は、より大きなサイズの配列をreallocし、前の文字列が終わる配列内の位置を使ってfgetsを再度呼び出します。 –

+3

@xing 'getline'は標準のC関数ではありませんが、あなたはそれがこの割り当てで利用可能であり、許可されていると思いますか? –

+0

何とか行を読むことができたとします。あなたはそれで何をしますか?ファイルから文字を一つずつ読み取って同じことをすることはできますか? –

答えて

1

あなたがこれを行うと、数字を抽出して、論理の残りを行いgetline

int max= 100; 
char* array; 
array = malloc(max*sizeof(char)); 
if(array == NULL) 
    exit(1); 
int c,i=0; 
while((c = getchar()) != EOF && c != '\n' && i < max) { 
    array[ i++ ] = c ; 
    if(i == max) 
    { 
     char * narray = realloc(array, max *= 2); 
     if(narray == NULL){ 
      free(array); 
      exit(1); 
     } 
     array = narray; 
    } 
    ... 
} 

の形態として、このスニペットを使用することができます。

+0

ねえ、ありがとう。私たちはポインタについてまだ学習しておらず、メモリを割り当てていませんでした。あなたはそれを使わなくてもいい方法がありますか? –

+0

ポインタを使わずに動的に割り当てますか?いいえ。考えられない – coderredoc

関連する問題