質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

2011閲覧

”end”という文字が入力されるまで、数値を入力し続けるプログラムを作成したいです

sazhi

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/03/26 08:22

”end”という文字が入力されるまで、数値を入力し続けるプログラムを作成したいです。

自分が書いたコードは以下の通りなのです。
文字形式で配列に数字を入力させて、endが入力されれば繰り返し処理終了。
その後数値に変換しようとしているのですが、
違う数値が出力されてきてしまい、解決方法がわかりません。アドバイスいただけないでしょうか。

C

1#include<stdio.h> 2#include<string.h> 3 4int main(void){ 5 char b[100]; 6 int i=0; 7 8 printf("input seisuu\n"); 9 while(1){ 10 scanf("%s",b); 11 if(strcmp(b,"end")==0){ 12 break; 13 } 14 i++; 15 } 16 17 int c[100]; 18 int t; 19 20 for(t=0;t<i-2;t++){ 21 c[t]=b[t]-'0'; 22 } 23 printf("%d\n",c); 24 25 return 0; 26} 27 28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2022/03/26 08:26

c[t]=b[t]-'0'; の時bに何入ってますか。
sazhi

2022/03/26 08:30

char型の数字を入れているつもりであります。
1T2R3M4

2022/03/26 08:38

つもり で済ませず、確認してみましょう。
fana

2022/03/28 01:43 編集

根本の部分の確認ですが…… 例えば,入力が 100 390831 2 end だとして,入力処理が終わった後で{ "100", "390831", "2" } という3つの文字列を { 100, 390831, 2 }という3つの数値に変換したい,という話なのであれば, 入力された文字列群(この例では{ "100", "390831", "2" } という3つの文字列)をどうにかして記憶しておく必要があるでしょう. その記憶手段はどうするという話なのでしょうか? 示されたコードからではそのあたりがどのように考えられているのかを読み取ることができません.
guest

回答3

0

入力しながら変換するのじゃダメなんですかね?
(最後にまとめて変換だと入力された文字列を全部記録しておく必要があります。)
あと上限決めずに入力し続けるならメモリを動的確保したほうがいいと思いますよ。

↓サンプル

C

1#include<stdio.h> 2#include<string.h> 3 4int main(void) { 5 char b[100]; 6 int i = 0; 7 int Max = 50; 8 9 //入力し続ける為にメモリを動的確保 10 int* c = (int*)malloc(sizeof(int) * Max); 11 if (c == NULL) { 12 printf("メモリの確保に失敗しました。\n"); 13 return 1; 14 } 15 16 printf("input seisuu\n"); 17 while (1) { 18 scanf("%s", b); 19 if (strcmp(b, "end") == 0) { 20 break; 21 } 22 //変換して代入する 23 c[i] = atoi(b); 24 i++; 25 26 //確保してる上限に達したら拡張 27 if (i == Max) { 28 Max += 50; 29 int* tmp = (int*)realloc(c, sizeof(int) * Max); 30 if (tmp == NULL) { 31 printf("メモリの確保に失敗しました。\n"); 32 break; 33 } 34 if (c != tmp) c = tmp; 35 } 36 } 37 38 //入力された数字を全て表示 39 for (int j = 0; j < i; j++) { 40 printf("%d\n", c[j]); 41 } 42 43 //メモリ開放 44 free(c); 45 46 return 0; 47}

投稿2022/03/26 14:54

kousatu

総合スコア225

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

char b[100];

これで文字列を100個格納できません。
格納できるのは 文字を100個 あるいは 最大長99文字の文字列ひとつ です。

投稿2022/03/26 08:35

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

printfの%dで指定するのはintであって、int[] (intの配列)ではありません

投稿2022/03/26 08:28

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問