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

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

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

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

C

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

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Q&A

解決済

2回答

1641閲覧

C言語、標準入力を用いたプログラムのエラーについて

careless007

総合スコア2

char

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

C

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

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

0グッド

0クリップ

投稿2020/06/30 05:46

前提・実現したいこと

C言語で、
・1 行目に与えられる文字列及び数値の個数 n を標準入力で与え、
2 行目から 2 + n 行目に文字列 S と数値 e が与えた上で、(例)sankaku 3
数値が e==3 の文字列だけを出力するプログラムを実行中、正確に出力されたものの、エラーメッセージが出力されてしまいました。
メッセージを読むと、char * でなければならないところを、char (*)[length]でにしてしまっていると読めますが、
解決方法が分かりません。
ご教授頂けるとありがたいです。
宜しくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ format specifies type 'char *' but the argument has type 'char (*)[length]' -wformat ##ソースコード `#include <stdio.h> int main(void){ int n,e; int length=80; char s[length]; char str[1000]; fgets(str, sizeof(str), stdin); sscanf(str,"%d\n",&n); //printf("%d",n); for(int i=0;i<n;i++){ char line[50]; fgets(line,sizeof(line),stdin); sscanf(line,"%s %d",&s,&e); // printf("%s %d\n",s,e); if(e==3){ printf("%s\n",s); } } return 0; } ### 補足情報(同プログラムに期待する動作について) 入力対する出力 入力     出力 5       sankaku maru 1 hoshi sankaku 3 sikaku 2 gokakkei 2 hoshi 3

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

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

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

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

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

guest

回答2

0

それ、エラーじゃなくて、ワーニングなんでは。
コンパイルは正常に終了してると思いますよ

投稿2020/06/30 05:52

y_waiwai

総合スコア88042

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

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

careless007

2020/06/30 06:06

おっしゃるとおり、ワーニングです。 失礼しました。
guest

0

ベストアンサー

&sじゃなくてsと書けば良いかと思います。

投稿2020/06/30 05:51

otn

総合スコア85901

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

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

y_waiwai

2020/06/30 05:54

ああ、そっちのほうだったか
careless007

2020/06/30 06:09

解決致しました。 ありがとうございました! &の使い方や意味について、再度勉強します。
otn

2020/06/30 06:24

&s[0] と書くのでもいいです。
careless007

2020/06/30 07:57

差し支えなければ、何故&s[0]でも良いのか教えて頂けると、大変助かります。
otn

2020/06/30 11:34 編集

(値を書く場所に)sだけかくと、「この配列の先頭アドレス」を湿します。 s[0]は、「この配列の先頭要素に入っている値」ですが、&はアドレスをを表す演算子なので、「この配列の先頭要素のアドレス」になります。 「この配列の先頭アドレス」と「この配列の先頭要素のアドレス」は表現は違いますが同じです。
careless007

2020/06/30 13:04

なるほど、sとs[0]は結局、同じように配列の先頭のアドレスを指し示すのですね。 理解できました! ありがとうございます。
otn

2020/06/30 13:10

> sとs[0]は結局、同じように いいえ。 s と &s[0] です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問