入力が次の形式で与えられます。
input
1データ型 データ数 データ1 データ2・・・
example1
1int 5 3 1252 20 58 10000
example2
1char 4 honma maji imiwakannne tasukete
このとき、プログラムでは与えられたデータ型の配列(要素数=データ数)を作成し、データを前から順番に配列に格納します。
この格納が上手くいっているかどうか、コメント(1)(2)の行でテストしたところ、データ型がint,charのどちらについても配列の先頭(添え字0)のみ正しく格納されており、他は0が入っているか滅茶苦茶な数字が入っているという状態でした。
いろいろ悩みましたがお手上げ状態なので、解決策(正しくデータを配列に格納する方法)を教えてください。
以下ソースコード
C
1#include <stdio.h> 2#include <string.h> 3#include <stdlib.h> 4 5void int_func(int items, char *s) { 6 int i; 7 int i_num[items]; 8 i_num[0] = atoi(strtok(s, " \0")); 9 for(i=1;i<items;i++){ 10 i_num[i] =atoi(strtok(NULL, " \0")); 11 } 12 for(i=0;i<items;i++){ 13 printf("%d\n",i_num[i]); /*(1)*/ 14 } 15} 16 17void char_func(int items, char *s) { 18 int i; 19 char *c[items]; 20 c[0] = strtok(s, " \0"); 21 for(i=1;i<items;i++){ 22 c[i] = strtok(NULL, " \0"); 23 } 24 for(i=0;i<items;i++){ 25 printf("%s\n",c[i]); /*(2)*/ 26 } 27} 28 29struct type_table { 30 char *type; 31 void (*func)(int, char*); 32} table[] = { 33 { "int", int_func }, 34 { "double", double_func }, 35 { "float", float_func }, 36 { "char", char_func }, 37 { NULL, NULL } 38}; 39 40 41int main(void){ 42 int items; 43 char buf[1024]; 44 char type[7]; 45 char value[1018]; 46 fgets(buf, sizeof(buf), stdin); 47 sscanf(buf,"%s %d %s",type, &items, value); 48 for(int i=0; table[i].type != NULL; i++) { 49 if(strcmp(table[i].type, type) == 0) { 50 table[i].func(items, value); 51 break; 52 } 53 } 54} 55
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/24 14:57
2019/06/24 14:59
2019/06/24 15:06