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

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

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

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

Q&A

解決済

5回答

796閲覧

int型で受け取った値をchar型で出力したい

gyoruo

総合スコア61

C

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

0グッド

0クリップ

投稿2020/05/04 02:42

以下のようなコードでint型で受け取った値をchar型の文字列として表示させたいのですが、うまくいきません。control reaches end of non-void function [-Wreturn-type]のようなwarningが表示されます。制御が非ボイド関数の終了に達した場合とは、どういうことでしょうか?

C

1#include <stdio.h> 2 3char* answer(int val) { 4 val = (char)val; 5 6 if ((0 <= val) && (val <= 5)) { 7 printf("0~5を選択しました。\n"); 8 } 9 else if ((6 <= val) && (val <= 10)) { 10 printf("6~10を選択しました。\n"); 11 } 12 return val; 13} 14 15int main(void) { 16 int value; 17 18 printf("0~10で好きな数字を入力してください\n"); 19 scanf("%d\n", &value); 20 21 printf("%s\n", answer(value)); 22 23 return 0; 24} 25

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

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

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

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

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

guest

回答5

0

val = (char)val;

これは整数を文字列にしようとしているのでしょうか?
こういうやり方を何処で覚えましたか?
キャストはこのような目的では使えません。
しかも、answer() の出口で val を返しています。
answer() は char * ですので、方が一致していません。

基本から復習したほうが良いように思います。

投稿2020/05/04 03:14

nob.

総合スコア711

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

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

gyoruo

2020/05/04 04:15

ご回答ありがとうございます! もう一度しっかしと基本を学び直します。
guest

0

x.c

c

1#include <stdio.h> 2 3char buffer[10]; 4 5char* answer(int val) { 6 if ((0 <= val) && (val <= 5)) { 7 printf("0~5を選択しました。\n"); 8 } 9 else if ((6 <= val) && (val <= 10)) { 10 printf("6~10を選択しました。\n"); 11 } else { 12 printf("0~10以外を選択しました。\n"); 13 } 14 sprintf(buffer, "%d", val); 15 return buffer; 16} 17 18int main(void) { 19 int value; 20 21 printf("0~10で好きな数字を入力してください\n"); 22 scanf("%d", &value); 23 printf("%s\n", answer(value)); 24 25 return 0; 26}

実行例:
イメージ説明

投稿2020/05/04 09:16

katoy

総合スコア22324

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

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

0

ベストアンサー

char型の文字列

char型は整数型の一種です。文字列では無いです。

プログラムからやりたいことを想像して書き直すと、

C

1#include <stdio.h> 2 3char *answer(int val) { 4 if ((0 <= val) && (val <= 5)) { 5 return "0~5を選択しました。\n"; 6 } 7 else if ((6 <= val) && (val <= 10)) { 8 return "6~10を選択しました。\n"; 9 } 10 return "0~10以外を選択しました。\n"; 11} 12 13int main(void) { 14 int value; 15 16 printf("0~10で好きな数字を入力してください\n"); 17 scanf("%d", &value); 18 19 printf("%s\n", answer(value)); 20 21 return 0; 22}

投稿2020/05/04 03:48

otn

総合スコア84421

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

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

gyoruo

2020/05/04 04:12

わかりやすいご回答、ありがとうございます!
guest

0

C

1#define _CRT_SECURE_NO_WARNINGS 2#include <stdio.h> 3#include <string.h> 4#include <stdlib.h> 5 6/* 返値は必ずfreeすること */ 7char* answer(int val) { 8 char buffer[16]; 9 char* result; 10 11 sprintf(buffer, "%d", val); 12 result = (char*)malloc(strlen(buffer)+1); 13 if ( result != NULL ) { 14 strcpy(result, buffer); 15 } 16 return result; 17} 18 19int main(void) { 20 int value; 21 char* result; 22 23 printf("0~10で好きな数字を入力してください\n"); 24 scanf("%d", &value); 25 26 printf("input : [%s]\n", result = answer(value)); 27 free(result); // わすれずに。 28 return 0; 29}

投稿2020/05/04 03:23

episteme

総合スコア16614

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

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

gyoruo

2020/05/04 04:14

ご回答ありがとうございます! メモリ開放を忘れずにします。
guest

0

char* answer(int val) {

ポインタを返すようになってるのに、charを返してるのでワーニングが出ています
*を抜きましょう

それと、

printf("%s\n", answer(value));

は意味不明です。ここで何をしたいのかよく考えよう

投稿2020/05/04 03:00

y_waiwai

総合スコア87719

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

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

gyoruo

2020/05/04 04:16

ご回答、ありがとうございます。 確かに、返り値の型が合っていないですね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問