(c言語の問題)
下記のプログラムを完成させ、キーボードから文字列を読み込み、-1文字ずらすことによって暗号化を行うプログラムを作りなさい。ただし、ピリオド、空白などはそのままにするようにすること。
例)this is a pen.
sghr hr @ qdm.
#include<stdio.h>
#define CHAR_NUM 256
void angou( I )
{
II
}
int main(void)
{
unsigned char text[CHAR_NUM];
char moji;
int i;
puts("暗号化する文字を入力しなさい。");
while((moji=getchar()) !=EOF){
text[i]=moji;
i++;
}
angou(text i);
printf("%s",text);
return(0);
}
I、IIに入る文を書きなさい。
私はIには「char x[],int y」
IIには
「if('A'<x[i]<'Z' && 'a'<x[i]<'z')
int j;
for(j=0;j<y;j++)
x[j]=x[j]-1
else」
といれたのですが、出力がうまくでません。どうすればいいのですか?
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
#include <stdio.h>
void ango(void){
char n;
n=getchar();
while(n){
n=getchar();
if(n=='.' || n==' '){
printf("%c",n);
continue;
}
printf("%c",n-1);
}
}
int main(void){
ango();
return 0;
}
これでできますよ
No.7
- 回答日時:
I
-----------------------
char str[], int length
-----------------------
II
-----------------------
int i;
for( i=0; i<length; ++i ){
if( ('A'<str[i] && str[i]<'Z')
|| ('a'<str[i] && str[i]<'z') ) str[i] = str[i]-1;
}
-----------------------
No.6
- 回答日時:
(どこかの「お教室」で出された課題でしょうか、参考URLにも似たような・・)
>-1文字ずらす → 「100円のものを -1 割引き」って、いくら???
(以前、民放女子アナが沖縄20℃、東京10℃のときに「ちょうど2倍」って言ってたけど、それ以来、札幌-5℃、東京5℃になったとき、なんて言うか楽しみにしている年寄り←回答脱線?)
ちなみに、参考URLでは、
>C言語を初めてけっこう立つんですが。
正C言語を始めてけっこう経つんですが。
ご両人「お教室」いっしょの帰国子女?。
(「△起(たつ)」でなくてよかった年寄り←削除対象?)
>this is a pen.
>sghr hr @ qdm. a(0x61)→@(0x40)、p(0x70)→q(0x71)???
これですと、
rprprp は qqqqqq となり解読は rrrrrr ???
★★★まっ、それはおいといて、★★★
ソースについては、ご自身で★バグを取ってから★質問しましょう。
というか、最低限のマナーだと思います。
その前に、No4さんがいわれるとおり、
>まずもっとC言語自体を理解した方がいい。
>失礼だけど、根本的にわかってないと思う。
と私も思います。
で、質問文に、
>IIには
>if('A'<x[i]<'Z' && 'a'<x[i]<'z')
と、すごく理解しがたい(x[i]に何が入っていようが trueになりそうな)if文を使われていますが、
#include<stdio.h>
voidmain(void)
{
inti = 0;
if( i == 1 ){} // (1)
if( i = 1 ){} // (2)
if( 1 == i ){} // (3)
if( 1 = i ){} // (4)
}
をコンパイルして下さい。
なぜ、こんなメッセージを出すのか★考えて★みて下さい。
・これからは if文は、(3)のように・・・となればいいのですが。
(まだまだ、いろいろあるけど、でも)
参考URLの方より goto文がないのは、いいですね。
「お教室」で会われましたら、(参考URLNo1さんへの「補足」で)
>goto文はやはり使ってはいけないのでしょうか?
とありますが、「言語仕様に goto文はあるし『いけない』わけではない。
『C言語を始めてけっこう経つ』んだから空気読めよ」と伝えて下さい。
参考URL:http://aol.okwave.jp/qa3549534.html
No.5
- 回答日時:
とりあえず気分転換に作ってみました。
(仕様が不明な部分は勝手に解釈しています)
(I)
void
(II)
}
#include <string.h>
#include <ctype.h>
int main(void)
{
static const char t[] = "@abcdefghijklmnopqrstuvwxyz";
int c;
while ((c = getchar()) != EOF)
{
const char *p;
p = strchr(t, tolower(c));
if (p != NULL) putchar(&p[-1] < t ? t[sizeof t - 1] : p[-1]);
else putchar(c);
if (c == '\n') break;
}
return 0;
#define main fake_main
#define angou(x)
ざっくりと動作は確認しました。
No.4
- 回答日時:
質問者さん、まずもっとC言語自体を理解した方がいい。
失礼だけど、根本的にわかってないと思う。
だから答えてあげたいけど、答えても分からないと思う。
でもそれだけだと可哀想なので、質問者さんがわかりそうなことを数点書いておきます。
そしてたぶんですが、質問者さんはIとIIの回答を求めていますが、実はmain()の中身も質問者さんが書いたのではないですか?
なぜなら、
・#define CHAR_NUM 256 と書かれていますが、それ以上入力された場合のことが考慮されていない。
・iが初期化されていない。...ということは、iがいきなり28965とかの値になっている可能性もある(その可能性の方が高い)ということです。
もし、main()の中身が、質問者さんが書かれた通りに書かれていたとしたら、この問題自体が間違っています。
仮にそれを置いておくにしても、
・IIの部分はコンパイルが通りません。
いきなりx[i]って書かれても、コンパイルは i が何だかわからないです。
・if('A'<x[i]<'Z' && 'a'<x[i]<'z') は、もし書くなら if(('A'<x[i]<'Z') || ('a'<x[i]<'z')) じゃないかな。
前者だと、逆に英字以外を拾ってくることになるよ。
ほかにもいろいろあるけど、あまりヒマじゃないんでこの辺で。
No.3
- 回答日時:
このプログラムの1, 2だけを変更して「正常動作できる」
プログラムは、完成できないとわたしは思いますが。。。
#include<stdio.h>
#define CHAR_NUM 256
void angou( 1 )
{
2
}
int main(void)
{
unsigned char text[CHAR_NUM];
char moji;
int i;
puts("暗号化する文字を入力しなさい。");
while((moji=getchar()) !=EOF){
text[i]=moji; /*未定義動作です*/
i++;
}
angou(text i);
printf("%s",text);
return(0);
}
問題文のコード自体が間違っているので、
出題者に確認した方がいいと思います。
>どうすればいいのですか?
どうすればいいか知りたいなら、
何を知りたいのか教えてください。
No.2
- 回答日時:
あちらこちらで削除された質問のようですが...
http://www.google.com/search?hl=ja&rlz=1T4DBJP_j …
> キーボードから文字列を読み込み、
キーボードから文字列を読み込む一般的な方法はありません。
標準入力の間違いではないですか? 本当にキーボードから読むのであれば、処理系を特定しなければ無理です。
> -1文字ずらす
「-1文字ずらす」とは?
> ピリオド、空白など
「など」には何が含まれるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
fgetsなどのときのstdinのバッ...
-
間接操作のレベルとは
-
CStringをwchar_tに変換したい
-
バイトスワップをやりたい
-
c言語でユーザ関数を利用して入...
-
C言語の入力した文字を反転させ...
-
atoi( ) の反対をやりたい
-
文字列から空白を取り除きたい...
-
Linuxでフォルダ内全ファイル名...
-
enumの記述について。
-
配列をnビットシフトする
-
ユニコード文字列の分割
-
DPマッチング
-
C言語です
-
RGB→YUV変換のプログラム
-
C言語のビットフィールドについて
-
c++ 文字列を入力して、一文字...
-
C言語のポインターで詰まっている
-
ワイルドカードを用いた文字列検索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報