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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Java Java 南京錠 2 2023/02/04 11:46
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgets関数を使用したときの文字...
-
文字列中に含まれる文字の個数...
-
Cで「大文字、小文字の判定」は...
-
反転した数値を表示させるやり方
-
C言語 空白の行(改行のみ)が...
-
CStringのFindで文字列検索を行...
-
小文字のみを数える方法
-
strstrを利用しない文字列検索...
-
文字列の途中に「0」がある場...
-
C言語、単語ごとに改行したい
-
sscanfとscanfの違いがよくわか...
-
文の意味
-
データ数値を16進文字列でprint...
-
c言語のプログラミングでキーボ...
-
16進数の文字列
-
C言語のfor文です。 繰り返しの...
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
Enterキーを押されたら次の処理...
-
*をユーザーが入力した数字の数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
反転した数値を表示させるやり方
-
fgets関数を使用したときの文字...
-
C言語 空白の行(改行のみ)が...
-
charと%c , %s の関係について
-
C言語のステップ数をカウントす...
-
fgetsで拾われる改行文字を削除...
-
itoaわかりません
-
C言語で16進数文字列から16進数...
-
strstrを利用しない文字列検索...
-
文字列中に含まれる文字の個数...
-
Cで「大文字、小文字の判定」は...
-
1行の文字列を時間差で表示する...
-
エディットボックスに入力され...
-
[Java]文字列分割
-
文字列の途中に「0」がある場...
-
教えていただけませんか?C言語...
-
atoiでの文字列以外のエラー処...
-
fgetsでバッファ残留文字列を無...
おすすめ情報