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

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

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

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

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Q&A

解決済

2回答

3677閲覧

入力された文字列の暗号化

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

0グッド

0クリップ

投稿2018/07/13 03:11

編集2018/07/13 03:13

前提・実現したいこと

以下の条件に従い、入力された文字列を暗号化するというプログラムが分かりません。

英大文字は,アルファベット順で次の文字(Zの次はAとする)にし英小文字に変換する.(例)A → b,F → g,Z → a 英小文字は,アルファベット順で前の文字(aの前はzとする)にし英大文字に変換する.(例)a → Z,k → J,z → Y 記号(英字以外)は変換しない.

入力される文字列は,文字数が512文字以下で,改行コードを含まないとする(スペース,タブは含まれることがある).

fgetsを使ったのですが、文字列が永遠に入力できるようになってしまいます。

ご回答よろしくおねがいします。

該当のソースコード

c

1#include<stdio.h> 2#define NUM 512 3 4int main(void) 5{ 6 int i; 7 char str[NUM]; 8 for (i=0; i<NUM; i++) { 9 if(fgets(str, NUM, stdin) == NULL) 10 break; 11 } 12 13 for (i=0; i<NUM; i++) { 14 if ( 65 <= str[i] && str[i] < 90) 15 str[i] = str[i] + 33; 16 else if ( 97 < str[i] && str[i] <= 122) 17 str[i] = str[i] - 33; 18 else if (str[i] = 90) 19 str[i] = str[i] + 7; 20 else if (str[i] = 97) 21 str[i] = str[i] - 7; 22 } 23 24 printf("%s", str[i]); 25 26} 27 28

試したこと

NULLの部分をなくし、fgetsだけにもしてみたのですが、結果が出ませんでした。

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

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

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

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

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

guest

回答2

0

fgetsを使ったのですが、文字列が永遠に入力できるようになってしまいます。

ということですが、永遠じゃないです。

for (i=0; i<NUM; i++) {

と、fgetsを512回繰り返すようにコーディングされてます。

その他もけっこうボロボロです。
まず===の区別が付いてない。また、str[i]が0ならループを抜けないと。また、・・・・・

投稿2018/07/13 03:40

otn

総合スコア84505

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

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

0

ベストアンサー

if(fgets(str, NUM, stdin) == NULL)

fgetsの戻り値は、ファイルの終わりが来たらNULLを返す、となってますが、
stdin、コンソールの入力には終わり、というのがないです。
なので、このif文が成立することはありません。

さて、なにをもって入力の終わりとしましょうか。


って、複数行入力するもんだと思ってみてたら、1行の入力なんですな。
そんなら、for文は不要で、
fgets(str, NUM, stdin);
だけでいけますやん


もひとつ、
printf("%s", str);
ですぜ

投稿2018/07/13 03:28

編集2018/07/13 03:38
y_waiwai

総合スコア87749

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問