C言語初心者です。
ある演習問題をやっていて詰まっています。
自分で入力した大文字の文字列を小文字にするプログラムを作るという問題なのですが、↓の条件があり、こんがらがってしまいました。
・入力した文字列に小文字が含まれていたら、エラーと表示して再び入力を促し、0を入力するとプログラム終了という流れにする。
・ポインタ変数を使う。
・continue文を使う。
・標準ライブラリ関数は使わない。
です。
・continue文というのがよくわからない。
・宣言した関数でどの処理をすればいいのかわからない。
・大文字を小文字にするというプログラムがわからない。
(アスキーコードをどう使うのか)
でつまっています。
どなたかアドバイス・解説・模範解答・指摘などしていただけないでしょうか。
よろしくお願い致します。
No.6ベストアンサー
- 回答日時:
> 文字列定数の前に 構文解析エラー
> 警告: 組み込み関数 `printf' と型が矛盾します
> 警告: データ定義が型や記憶クラスを持っていません
>
> というエラーがでました
> これは何ですか・・・?
printfの直前にある } は、int main(void){ の { と対応しています。
つまり、printfは関数の外で呼び出していることになります。
また、<stdio.h>もインクルードしていないようです。
ところで、アルファベットが連続していることは規格上保証されていません。処理系不明の状況で、
> while(a<='A' && a>='Z'){
> if(a>='a' && a<='z') {
> a-='a'-'A';
といった処理は不適切です。
参考URL:http://www.kijineko.co.jp/tech/superstitions/A-t …
No.5
- 回答日時:
> #include<string.h>を使わない
ということは、<ctype.h>や<wctype.h>は使えるわけですね。
だったらtolowerやtowlowerを使えばよいのでは?
そもそも処理系不明ですので...
> (アスキーコードをどう使うのか)
文字コードがアスキーであることを期待することはできません。
また、キリル文字やギリシャ文字など、ラテン文字以外の対応も考えないといけないので、標準ライブラリなしでは困難です(対象となる文字集合と符号体系を特定するなら、手間はかかっても可能です)。
この回答への補足
int main(void){
char a;
int i;
while(a<='A' && a>='Z'){
printf("Please input string>>");
scanf("%s" ,&a);
if(a>='a' && a<='z') {
printf("Error! Please input string, again.\n");
continue;
}
}
a-='a'-'A';
}
printf("%c",a);
return 0;
}
5つの回答や別のページを参考にプログラムを作ったのですが
printf("%c",a);の部分で
文字列定数の前に 構文解析エラー
警告: 組み込み関数 `printf' と型が矛盾します
警告: データ定義が型や記憶クラスを持っていません
というエラーがでました
これは何ですか・・・?
No.4
- 回答日時:
こんにちは。
多少アドバイスを。
>・continue文というのがよくわからない。
調べれば一発です。
>・宣言した関数でどの処理をすればいいのかわからない。
ご自身で
・自分で入力した大文字の文字列を小文字にする
・入力した文字列に小文字が含まれていたら、エラーと表示して再び
入力を促し、0を入力するとプログラム終了という流れにする。
これが関数の内容です。
あとは処理の流れを他人でも解るレベルまで噛み砕く(分解)していけばいいです。
>・大文字を小文字にするというプログラムがわからない。
(アスキーコードをどう使うのか)
アスキーコード表をまず確認。
その後文字を入力して対応する数字を出力するプログラムを作成すればわかります。
おそらく、今度はポインタの使い方で詰まるかなと思います。
ご参考までに。
No.1
- 回答日時:
回答を見てしまうと勉強にならないかと思いますので、
軽くアドバイスを。
continueはググれば出てきたので調べましょう。
ポインタと使うという以外は簡単なプログラムですが、
流れ的には、
一文字ずつ文字を調べ、小文字ならエラー、0なら終了、大文字なら変換。
大文字の場合は関数に飛ばし、
大文字→小文字をする。
大文字→小文字変換は、
ライブラリ関数を使ってはいけないということなので、
コード表を眺めていればわかると思いますが、
大文字にある数を足すと小文字になります。
これを使えばできるかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sscanfとscanfの違いがよくわか...
-
CStringのFindで文字列検索を行...
-
C言語 空白の行(改行のみ)が...
-
itoaわかりません
-
ある文字列で2回目3回目に出現...
-
C言語のステップ数をカウントす...
-
aから始まりzzzzで終わるために...
-
ブランクのチェック
-
文字列の途中に「0」がある場...
-
エディットボックスに入力され...
-
2進数から10進数へ変換プログラム
-
C言語で16進数文字列から16進数...
-
charと%c , %s の関係について
-
fgets関数を使用したときの文字...
-
大文字の文字列→小文字の文字列
-
全角文字のチェック
-
小文字のみを数える方法
-
putsとputcharの違い?
-
2÷3などの余りについて
-
DWORDの実際の型は何でしょうか
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
fgets関数を使用したときの文字...
-
charと%c , %s の関係について
-
反転した数値を表示させるやり方
-
strstrを利用しない文字列検索...
-
C言語 空白の行(改行のみ)が...
-
C言語、単語ごとに改行したい
-
itoaわかりません
-
C言語のステップ数をカウントす...
-
fgetsで拾われる改行文字を削除...
-
C言語で16進数文字列から16進数...
-
Cで「大文字、小文字の判定」は...
-
CStringについて
-
C言語の課題です
-
文字列中に含まれる文字の個数...
-
単語数のカウントについて
-
文の意味
-
fgetsでバッファ残留文字列を無...
-
putsとputcharの違い?
おすすめ情報