• ベストアンサー

C言語 暗号化について

暗号化について勉強しているのですが、奇数文字+1、偶数文字-1にするときは、#include <stdio.h> #include <stdlib.h> #include <ctype.h> char myislower(char c) { if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){ if(c % 2 == 1){ c = c+1; }else{ c = c-1; } } return c; } このプログラムでやりたいのですが、エントリーポイントを定義しなければなりません、とエラーがででしまいます。どうしたらいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

>エントリーポイントを定義しなければなりません、とエラーがででしまいます。どうしたらいいでしょうか? C言語は「mainと言う名前の関数」が「エントリ関数」になり、この関数の入り口が「エントリポイント」として定義されます。 そして、プログラムを起動すると、必ず、main関数から実行し始めます。 1つのプログラムには、必ず、1つのmain関数が存在している必要があります。main関数が1つも無かったり、2つ以上あってはいけません。 質問者さんのプログラムでは、charを1文字与えると、charが1文字返って来るだけです。 これだけではプログラムは動きませんから、main関数に ・文字列を入力する。 ・入力した文字列からcharを順に1文字づつ取り出す。 ・取り出したcharを質問文にある関数に与える。 ・変換後の文字列を作る場所に、返って来たcharを1文字づつ格納する。 ・文字列が無くなったら、変換後の文字列を表示する。 と言う処理を書く必要があります。

asaki2008
質問者

お礼

この間指摘された部分を修正したところ、ちゃんとコンパイルできました。 ありがとうございます。

その他の回答 (2)

  • arain
  • ベストアンサー率27% (292/1049)
回答No.3

前の質疑はどうして削除したの? それがあるのとないのとでは全然違うんだけど。 この質問の関数は、どう見ても前の質疑で「サブルーチン」として出てくるべき内容のはずだけど。

asaki2008
質問者

補足

この前の質疑はサイト側によって削除されました。 すみません。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

c言語の約束 どこから実行されるか という話。 http://www.google.com/search?q=c%E8%A8%80%E8%AA%9E%20%E5%9F%BA%E6%9C%AC&hl=ja&lr= 簡単に言うと「C言語は最初に実行する関数の『名前』が決まっている」 質問文のソースはそれに従っていないだけだね。 ちょっと書き直すだけでできるはずだよ

asaki2008
質問者

お礼

ありがとうございます。参考にさせて頂きます。

関連するQ&A

  • 大学の授業で作った暗号化プログラムが動きません。

    下記のような暗号化プログラムを作成したのですが動きません。 問題のある場所は36行目(/で囲まれた行)で式の構文エラーと診断されたのですが、どう直せばいいのか分かりません。 どなたかどうすればよいのかお教え下さい。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int anngou (int c, char b[81]) { while (c <= 81) { if(b[c] >= 'a' && b[c] <= 'z') { if(b[c] >= 'a' && b[c] <= 'm') { b[c] = b[c] + 13; } else { b[c] = b[c] - 13; } } else { if(b[c] >= 'A' && b[c] <= 'Z') { if(b[c] >= 'A' && b[c] <= 'M') { b[c] = b[c] + 13; }else{ b[c] = b[c] - 13; } } } } return b[c]; } int main(void) { int a, c; char b[81]; a = c = 0; while (a <= 9) { printf("Input some words: "); fgets(b, 81, stdin); /b[c] = anngou(char b[c]);/ c = 0; while (c <= 81) { printf("%s", b[c]); c++; } printf("\n"); a++; } exit(0); }

  • C言語の質問です

    下記のプログラムはテキストファイルを読み込み、AからZまでの文字(小文字、大文字は区別しない)がそれぞれ何回 現れたかを数えるプログラムです。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int count[26]; int main(int argc, char *argv[]) { FILE *fp; char ch; int i; /* ファイル名の指定を調べる */ if(argc!=2) { printf("ファイル名の指定がありません\n"); exit(1); } if((fp = fopen(argv[1], "r"))==NULL) { printf("ファイルを開くことができません\n"); exit(1); } while((ch=fgetc(fp))!=EOF) { ch = toupper(ch); if(ch>='A' && ch<='Z') count[ch-'A']++; } for(i=0; i<26; i++) printf("%c は %d 回出現\n", i+'A', count[i]); fclose(fp); return 0; } 1)int count[26]; で、なぜ26なのかが分かりません。 2)count[ch-'A']++; はどういう動作をするのか詳しく教えてほしいです。 3)よって、for文がどういう動作で表示しているのかが分かりません。 未熟者の私ですが、どなたか教えていただけないでしょうか?

  • c言語についての質問です。

    #include<stdio.h> int main(void){ int a; printf("1文字たいぷしてください。\n"); scanf("%d",&a); if(a>=65 && a<=90){ printf("大文字です。\n"); } else if(a>=97 && a<=122){ printf("小文字です。\n"); } else{ printf("大文字でも小文字でもありません\n"); } return 0; } このプログラムは正しくなくて、 intをchar %dを%cにかえなければなりません。 なぜintはダメなんでしょうか? できれば丁寧に教えてください。 お願いします。

  • C言語で簡単暗号

    C言語を初めてけっこう立つんですが。 自分なりにソフトを作ってみました 暗号化、解読ができるソフトです 1.暗号化 2.解読 3.Quit ソースは #include <stdio.h> int main(void) { int i; char da; back: modo: do{ printf("1.angouka\n"); printf("2.kaidoku\n"); printf("3.Quit\n"); scanf("%d",&i); }while(i<1 || i>3); if(i==1){ da=getchar(); while(da){ printf("%c",da+1); da=getchar(); if(da=='.'){ goto modo; } } } else if(i==2){ da=getchar(); while(da){ printf("%c",da-1); da=getchar(); if(da=='.'){ goto back; } } } return 0; } なんですが。感想などここはこうした方が良いなどと教えてもらいたいんですが。 もっと簡潔にかけて破かれにくい暗号を書くにはどうしたらいいでしょう 教えて下さい

  • C言語 コンパイルできるが実行するとエラー

    非負の数字を入力してもらい表示させ、数字以外を入力した場合は終了するプログラムです↓(VC使用) ━━━━━━━━━━━━━━━━━━━━━━━━━━ #include "stdafx.h" #include <stdio.h> #include <stdlib.h> /* atoi使用 */ #include <ctype.h> /* isdigit使用 */ int main(void) {   char cx;   int nx;   printf("非負の整数を入力してください。:");   scanf("%s", cx);   if(isdigit(cx) == 0){     printf("数字を入れてください。\n");   }else{     nx = atoi((const char*) cx);   }   printf("%d", nx);   return 0; } ━━━━━━━━━━━━━━━━━━━━━━━━━━ 実行し文字を入力するとDebug Error!と小窓がでます。どこがおかしいのでしょうか?

  • c言語の難しい問題について

    (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」 といれたのですが、出力がうまくでません。どうすればいいのですか?

  • C言語での質問です。

    何か文字を打ち、その後鍵(整数)を入力します。 すると、元の文字が暗号化されて表示。 というプログラムを作っています。 暗号化の具体的な方法は、 (1)、元の文を鍵の整数で分けます。 例:元の文「aiueo」鍵「2」→「ai」「ueo」 (2)、そして、分けた文を混ぜます。 文字数が多い方を先に混ぜていきます。 「ai」「ueo」→「uaeio」 (3)、この混ぜた文を暗号文として出力。 という感じのプログラムを作りたいのですが、上手く混ざらず困っています。 出力された時、上手く混ざってなかったり文字化けしてるような文字が出てきたりなど。 ソースは↓です。 #include<stdio.h> #include<string.h> int main(void) { char word[256]; char angou[256]={0}; char kari[1][256]={0}; int key,i,n,a=0,b,mae,ushiro; printf("単語を入力してください。:\n"); scanf("%s",word); printf("鍵となる整数を入力してください。:\n"); scanf("%d",&key); n=strlen(word); i=0; while(i<=key-1){ kari[0][i]=word[i];/*keyの文字数までの文字を入れる。*/ i++; } while(key-1<=n){ kari[1][a]=word[i];/*keyの文字数から最後までの文字を入れる。*/ a++; i++; } i=0; a=0; mae=strlen(kari[0]); ushiro=strlen(kari[1]); if(mae>=ushiro){/*どちらの方が文字数が多いかを比べる。*/ for(b=0;b<=n;b++){ if(b%2){ angou[b]=kari[1][a];/*奇数の時、文字数が少ない方を入れる。*/ a++; } else{ angou[b]=kari[0][i];/*偶数の時、文字数が多い方を入れる。*/ i++; } } } else if(mae<ushiro){ for(b=0;b<=n;b++){ if(b%2){ angou[b]=kari[0][a]; a++; } else{ angou[b]=kari[1][i]; i++; } } } printf("暗号文は%sです。\n",angou); return(0); } 何がおかしいでしょうか?

  • c言語について。

    #include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<time.h> int goukei=0; //goukei関数の定義 int detame; //detame関数の定義 void gusu(){printf("偶数%dが出ました。ゲームオーバーです。\n",detame); getchar(); exit(1);} int kisu(){ goukei=goukei+detame; printf("奇数%dがでました。合計%d点です。\n",detame,goukei); } main(){ char answer[20]; //文字型変数answerの宣言 int amari; //amari関数の宣言 //ゲームの説明・開始 printf("さいころの目が奇数なら、出た目だけ得点が加算され、\n"); printf("偶数が出たら、その場でゲームオーバーです。\n"); printf("さいころを振ってください。\n"); getchar(); srand((unsigned)time(NULL));//rand関数の初期化 detame=rand()%6+1;//1から6までの乱数の発生 amari=detame%2; if(amari==0){gusu();}else{kisu();} while(1) { printf("ゲームを続けますか?yesかnoで答えてください。\n"); scanf("%s",&answer); if(strcmp(answer,"no")==0){ break;} printf("ゲームを続けます。\n"); printf("さいころを振ってください。\n"); getchar(); detame=rand()%6+1; amari=detame%2; if(amari==0){gusu();}else{kisu();} } //合計得点とゲームの終了 printf("合計で%d点でした。ゲームを終了します。\n",goukei); } このプログラミングはさいころを振って、奇数なら出た目が加算され奇数ならゲームオーバーというものなんですが、さいころを二つにするときはどういうプログラムになるのか教えてください。お願いします。

  • C言語で 小文字を大文字に変えるプログラム

    C言語で小文字を大文字に変えるプログラムを造ったのですが、エラーが出てしまいます。 どこが間違っているのか教えてください。 #include<stdio.h> main() { char a[100]; scanf(%c,&a[i]); int i=0; while(i<100){ i++; if(a[i]>60){ printf("%x-20",a[i]); }else{ printf("%x",a[i]) } } }

  • プログラムが動きません

    一昨日教えていただいた入力された文字を13ずつずらして表示する暗号化プログラム(文字列は一行最大80文字、10行分の入力を受け付けたら終了)、がまだ動きません(下記のプログラム)。エラーにはならないのですが、何も表示されませんが10回入力すると終了はするが、何も表示がされません。どういうプログラムならよいのかもう一度どなたかお教え下さらないでしょうか? #include <stdio.h> #include <stdlib.h> #include <ctype.h> char e[81]; int anngou (int c, char b[81]) { if(b[c] >= 'a' && b[c] <= 'z') { if(b[c] >= 'a' && b[c] <= 'm') { e[c] = b[c] + 13; } else { e[c] = b[c] - 13; } } else { if(b[c] >= 'A' && b[c] <= 'Z') { if(b[c] >= 'A' && b[c] <= 'M') { e[c] = b[c] + 13; }else{ e[c] = b[c] - 13; } } } return e[c]; } int main(void) { int a, c, d; char b[81]; a = c = 0; while (a <= 9) { printf("Input some words: "); fgets(b, 81, stdin); for (c = 0; c <= 81; c++) { if (b[c] == '\0') { d = c; break; } } c = 0; while (c >= d) { anngou(c,b); printf("%c", e[c]); c++; } printf("\n"); a++; } exit(0); }