2016-09-07 14 views
-1

私はC言語で、整数の配列に格納することなく、1つの列に書式化された数値の入力を持っています。なぜ私のコードが入力を読み込んで出力しないのか分かりません。助けてください。文字列の配列への入力は表示されませんか?

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

int main() { 
    int i; 
    char *nums[400]; 

    for (i=0; i<nums; i++) { 
     scanf(nums[i]); 
     printf("%.*s", 3, nums[i]); 
    } 
    return 0; 
} 
+0

scanfを間違って使用しているようです。今はnums [i]で指定された書式を変数に読み込もうとしています。また、iとnumの比較が間違っています。 –

+0

あなたは 'nums [i]'にスペースを割り当てていないので、未定義の動作を引き起こしています。 – Barmar

答えて

0

あなたは400個のポインタの配列を持っていますが、それらを初期化したことはありません。代わりに、2次元の配列を宣言できます。

char nums[400][4]; 

次にあなたがforループには限度としてnums使用しようとしています。あなたが実際に望むのは、numsの要素の数です。これはsizeof(nums)/sizeof(nums[0])です。配列のサイズを指定するマクロを定義することもできます。

次に、書式文字列の引数をscanf()にしました。

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

#declare SIZE 400 

int main() 
{ 

    int i; 
    char *nums[SIZE][4]; 

    for(i=0; i<SIZE; i++){ 

    scanf("%3s", nums[i]); 
    printf("%.*s", 3, nums[i]);  
    } 
    return 0; 
}  
0

Baramarがあなたの主な問題を正確かつ完全に説明したように、私はあなたの問題について異なる理解をしていると思います。あなたは、きちんとそのような各3桁の列にフォーマットさ、数の与えられた文字列、例えば:2134567896543245678をしたいし、単一の列でそれをプリントアウト:

213 
456 
789 
654 
324 
567 
8 

を整数の断続的な配列なし。例えばのように行うことができる

:この

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

#define BUFFER_SIZE 512 

int main() 
{ 

    int res; 
    // for the scanf input, set all to '\0' 
    char buffer[BUFFER_SIZE + 1] = { '\0' }, *idx; 
    size_t len, i; 

    // restrict max-size to BUFFER_SIZE 
    res = scanf("%512s", buffer); 
    if (res != 1) { 
    exit(EXIT_FAILURE); 
    } else { 
    if (strcmp(buffer, "exit") == 0) { 
     exit(EXIT_SUCCESS); 
    } 
    // TODO: check if the buffer contains all digits 
    len = strlen(buffer); 
    idx = buffer; 
    for (i = len; i >= 3; i -= 3, idx += 3) { 
     printf("%.3s\n", idx); 
    } 
    // last entries, if any 
    if (*idx != '\0') { 
     printf("%s\n", idx); 
    } 
    } 
    exit(EXIT_SUCCESS); 
} 

あなたは例えばのような行の実際の整数を取得する場合:12 3123 23478 34 5456 567456 567 678あなたがそのようなものを使用することができます後

EDIT

を浮動小数点を使用するOPのコメント私はフォームの入力を受け入れるようにコードを変更しました:

24722.319352    51433.662233 
    56087.991042    49357.684934 67875.375848  68421.563197 

54521.615295 

22744.470483 

38097.001461 80878.250982 
92131.575748    7217.137271 
20750.671365 7620.695008 37118.391541 28655.609469 46885.110202 87114.202312 
46462.577299 








20557.716648 

とコード:

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

#define MAXNUM 400 
int main() 
{ 
    int res; 
    int i = 0, m; 
    // input and two temporary variables 
    double in, in1, in2; 

    for (m = 0; m < MAXNUM; m++) { 
    res = scanf("%lf", &in); 
    if (res != 1) { 
     break; 
    } else { 
     switch (i) { 
     case 0: 
      // set value of first temporary variable to input 
      in1 = in; 
      // increment indicator indicating position in output row 
      i++; 
      break; 
     case 1: 
      in2 = in; 
      i++; 
      break; 
     case 2: 
      // print the three numbers and a newline 
      fprintf(stdout, "%f %f %f\n", in1, in2, in); 
      // reset counter 
      i = 0; 
      break; 
     } 
    } 
    } 
    // if there are still numbers, print them 
    if (i != 0) { 
    if (i == 1) { 
     fprintf(stdout, "%f\n", in1); 
    } else { 
     fprintf(stdout, "%f %f\n", in1, in2); 
    } 
    } 
    exit(EXIT_SUCCESS); 
} 

あなたがctrl+dたりして、ほとんどのUnixシェルで起動することができますが、EOFで終了する必要が400個の未満のエントリを入力した場合

$ gcc-4.9 -O3 -g3 -W -Wall -Wextra -std=c11 sc.c -o sc 
$ ./sc < floatin 
24722.319352 51433.662233 56087.991042 
49357.684934 67875.375848 68421.563197 
54521.615295 22744.470483 38097.001461 
80878.250982 92131.575748 7217.137271 
20750.671365 7620.695008 37118.391541 
28655.609469 46885.110202 87114.202312 
46462.577299 20557.716648 

でそれを試してみてください例えば、-1のようなエントリを終了させるためのエントリを設定します。すべてが正の数であり、それがループから抜けることを確認します。上の例のようにファイルを提出すると、自動的に動作します。

+0

私はあなたが言っていることを得るが、私が受け取る入力は4356.34543543のような数字であり、ホワイトラインで区切られている。 –

+0

'4356.34543543'私は、' scanf( "%f"、&in) 'を使い、その数値を保持する変数に' double'(または 'float')を使用するだけです。しかし、「ホワイトライン」とは何ですか?すべての番号の間に空白行がありますか?あなたの投稿に入力例を追加してください(空白を表示するように書式設定することができます。) – deamentiaemundi

+0

空白、タブなどのホワイトライン次に例を示します。 https://gyazo.com/30a6e016c1a0c9a3b6007354ee532e1c –

関連する問題