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

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

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

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

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

Q&A

解決済

2回答

2811閲覧

C言語のchar型の取り扱いについて

sergio

総合スコア10

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

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

0グッド

0クリップ

投稿2021/05/14 02:38

c言語初心者です。
文字列を取り込んで大文字と小文字を変えるプログラムをc言語で書いているのですが、
コンパイルすると下に記述したような警告が出ます。
正直、よくわからなくて混乱しています。
何がダメなんでしょうか。
どなたか教えていただけると幸いです。

c

1#include<stdio.h> 2#include<string.h> 3 4char abc[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOQRSTUVWXYZ"; 5 6char *change(char *a){ 7 int i,j; 8 for(i=0;i<26;i++){ 9 if(strcmp(a,abc[i])){ 10 return abc[i+26]; 11 } 12 } 13for(i=26;i<52;i++){ 14 if(strcmp(a,abc[i])){ 15 return abc[i-26]; 16 } 17 } 18} 19 20int main(){ 21int i,j,n; 22char a; 23while(scanf("%c",&a)!=EOF){ 24printf("%c",change(a)); 25} 26 return 0; 27}

terminal

1gcc -o huku8-1 huku8-1.c 2huku8-1.c: In function ‘change’: 3huku8-1.c:9:20: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast [-Wint-conversion] 4 9 | if(strcmp(a,abc[i])){ 5 | ~~~^~~ 6 | | 7 | char 8In file included from huku8-1.c:2: 9/usr/include/string.h:137:50: note: expected ‘const char *’ but argument is of type ‘char’ 10 137 | extern int strcmp (const char *__s1, const char *__s2) 11 | ~~~~~~~~~~~~^~~~ 12huku8-1.c:10:19: warning: returning ‘char’ from a function with return type ‘char *’ makes pointer from integer without a cast [-Wint-conversion] 13 10 | return abc[i+26]; 14 | ~~~^~~~~~ 15huku8-1.c:14:20: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast [-Wint-conversion] 16 14 | if(strcmp(a,abc[i])){ 17 | ~~~^~~ 18 | | 19 | char 20In file included from huku8-1.c:2: 21/usr/include/string.h:137:50: note: expected ‘const char *’ but argument is of type ‘char’ 22 137 | extern int strcmp (const char *__s1, const char *__s2) 23 | ~~~~~~~~~~~~^~~~ 24huku8-1.c:15:19: warning: returning ‘char’ from a function with return type ‘char *’ makes pointer from integer without a cast [-Wint-conversion] 25 15 | return abc[i-26]; 26 | ~~~^~~~~~ 27huku8-1.c: In function ‘main’: 28huku8-1.c:24:20: warning: passing argument 1 of ‘change’ makes pointer from integer without a cast [-Wint-conversion] 29 24 | printf("%c",change(a)); 30 | ^ 31 | | 32 | char 33huku8-1.c:6:20: note: expected ‘char *’ but argument is of type ‘char’ 34 6 | char *change(char *a){ 35 | ~~~~~~^ 36huku8-1.c:24:10: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘char *’ [-Wformat=] 37 24 | printf("%c",change(a)); 38 | ~^ ~~~~~~~~~ 39 | | | 40 | | char * 41 | int 42 | %s

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

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

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

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

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

guest

回答2

0

警告を意訳するとこんな感じになります。

  • strcmpの第2引数はポインタだけど、ポインタじゃない変数が渡されているよ
  • 関数changeの戻り値の型はchar*だけどcharを返しているよ
  • 関数changeの第一引数はポインタだけど、ポインタじゃない変数が渡されているよ

どこがおかしいかといえば全体的におかしいです。

いきなりゴールを作ろうとせずに

  1. 入力した文字列をそのまま表示するプログラム
  2. 入力した文字列をすべて大文字にするプログラム
  3. 入力した文字列をすべて小文字にするプログラム
  4. 入力した文字列を大文字は小文字に、小文字は大文字にするプログラム

と段階を踏んでやってみましょう。

投稿2021/05/14 02:53

編集2021/05/14 02:58
ozwk

総合スコア13512

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

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

0

ベストアンサー

「文字列 char*」と「文字 char」を混同しているように見えます。

  • 関数 change() は文字を受け取って文字を返す意図でしょうから、「char change(char a)」であるべきです。
  • strcmp()は文字列を比較する関数です。文字の比較なら a == abc[i] でよいです。

投稿2021/05/14 03:39

int32_t

総合スコア20672

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

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

sergio

2021/05/14 04:48

みなさん、ありがとうございました。 解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問