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

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

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

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

Q&A

解決済

1回答

583閲覧

コマンドからから入力した文字列を数値に直したいです

earth1362

総合スコア11

C

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

0グッド

0クリップ

投稿2022/03/22 06:13

コマンドライン引数に最初に 1 か 2 を,次に 1 なら10進数, 2 なら2進数の数字の文字列を複数指定し,以下のように10 進数の数値にして印字したいです。
< 実行例>

./sample 2 1100 111⏎
1100B = 12
111B = 7
./sample 1 1234 56789⏎
1234 = 1234
56789 = 56789

自分のコードで以下のように実行すると、以下のようになってしまいます。

./sample 1 1234 5678
1234 = 6562
5678 = 11006
./sample 2 1100 111
1100B = 348
111B = 151

色々試した結果str_to_dec,bin_to_decには問題がないと思われます。
訂正箇所を教えでいただけるとありがたいです。

C

1コード 2#include <stdio.h> 3 int str_to_dec(const char s[]){ 4 x1 = s[0] - '0'; 5 for( i = 1; s[i] != '\0'; i++ ){ 6 x2 = s[i] - '0'; 7 x1 = 10 * x1 + x2; 8 } 9 return x1; 10 } 11 int bin_to_dec(const char s[]){ 12 x1 = s[0] - '0'; 13 for( i = 1; s[i] != '\0'; i++ ){ 14 x2 = s[i] - '0'; 15 x1 = 2* x1 + x2; 16 } 17 return x1; 18 } 19 int main(int argc, char *argv[]) { 20 int i; 21 /*引数が2つ以上指定されていなかった場合 */ 22 if(argc <= 2){ 23 fprintf( stderr, "usage: %s [1 or 2] [binary numbers]¥n", argv[0] ); 24 return 1; 25 } 26 switch( argv[1][0] ){ 27 case '1': 28 for(i = 2;i<argc;i++) 29 printf("%s = %d\n",argv[i],str_to_dec(argv[i])); 30 break; 31 case '2'; 32 for(i = 2;i<argc;i++) 33 printf("%sB= %d\n",argv[i],bin_to_dec(argv[i])); 34 break; 35 default : 36 break; 37 } 38 return 0; 39} 40 41

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

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

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

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

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

int32_t

2022/03/22 06:43

質問文のコードではコンパイルできないはずです。古いソースから作った実行ファイルを試してたりしませんか。
earth1362

2022/03/22 07:17

古いソースから作ってはいないと思います。 コンパイル出来ない理由を教えていただけますでしょうか。
int32_t

2022/03/22 07:26 編集

y_waiwai さんの回答にあるとおりいくつか変数が宣言されていないのと、case '2' の後のセミコロンです。 コンパイルできるコードがあるなら、それをコピペしてくださいね。
earth1362

2022/03/25 05:51

わかりました。 ありがとうございます。
int32_t

2022/03/25 05:58

あれ、この質問は解決したのですか? コンパイルエラーを除くと何が問題でした?
guest

回答1

0

ベストアンサー

int bin_to_dec(const char s[]){

2進数の後尾のBが来たときの処理が入ってませんね


ああ、B入れてるのは表示側なのね。
ってことで、まじめに動かしてみました。

Main.c:4:4: error: use of undeclared identifier 'x1' x1 = s[0] - '0'; ^

コンパイルエラーでてますやん。
未定義の変数x1使ってるとおっしゃってますぜ

投稿2022/03/22 06:20

編集2022/03/22 06:28
y_waiwai

総合スコア87774

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

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

earth1362

2022/03/22 07:12

すみません。 元のコードではきちんと定義されていました。 ここに移す際に書き忘れてしまいました。
y_waiwai

2022/03/22 08:35

ちゃんとコピペでコードを提示しよう。 コードが間違ってるってことなら答えようないですぜ
earth1362

2022/03/25 05:50

すみません。 linuxからwindowsにコピペができずそのまま移す形になってしまいました。 
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問