Hallo,
länger her, aber da bin ich mal wieder.
Ich habe dieses Programm für die Uni geschrieben, dass im Großen und Ganzen auch Funktioniert.
Ich habe jetzt allerdings das Problem, dass die große while Schleife beim ersten Durchlauf einwandfrei läuft, beim zweiten Durchlauf, aber kein String mehr über gets eingelesen wird.
Das Programm verhält sich dann so, als ob das gets() dort gar nicht stünde.
Ist das normal für gets(); oder kann ich diesen Fehler irgendwie umgehen?
Danke im Voraus
Hier spendiere ich mal den Code:
#include <stdio.h>
#include <string.h>
#define length 160
int StringLaenge(char *szString)
{ int i=0, ia='a';
while(ia!=0) // Ermittlung der Länge des Strings
{ia= szString;
i++;
}
--i;
return i;
}
int StringPruefung (char *szString, int i)
{ int ib=0;
for(ib=0; ib<i; ib++) //Eingabekontrolle
{ if((szString[ib]>=32)&&(szString[ib]<=126))
ib++;
else
{
printf("\nFalsche Eingabe, Programm wurde beendet.\n");
return 0;
}
}
}
void Einlesen (char *szString)
{
gets(szString);
}
void Ausgabe(char *szString, char cWahl)
{switch(cWahl)
{case '1': {
printf("\nDer verschlüsselte Text ist: %s\n", szString);
}
break;
case'2': {
printf("\nDer dechiffrierte Text lautet: %s\n", szString); }
break;
}
}
char Verschluesseln (char *szString,int i, int ikey)
{int ic=0, ivar=0;
for(ic=0; ic<i; ic++)
{ivar = szString[ic];
if(ivar<127-ikey)
szString[ic] = ivar+ikey;
else
szString[ic] =ivar-94+ikey;
}
return szString[ic];
}
int Entschluesseln (char *szString, int i, int ikey)
{int id=0, ivar2=0;
for(id=0; id<i; id++)
{ivar2 = szString[id];
if(ivar2>=32+ikey)
szString[id] = ivar2-ikey;
else
szString[id] =ivar2+94-ikey;
}
return szString[id];
}
int Verdrehen(char *szString,int i)
{int izahl, ivar;
char szString2[i-1];
for(izahl=0; izahl<i; izahl++)
{ivar= szString[izahl];
szString2[i-izahl-1]=ivar;
}
return szString2[izahl];
}
int main ()
{
int i=0, ikey=0,itest=3;
char szString[length], ca, szCopy[length];
while(itest!=0)
{
printf("\nBitte einen Text eingeben mit max. 160 Zeichen, 'exit' um zu beenden.\n");
gets(szString);
itest=strncmp(szString, "exit",4);//test um zu beenden
if(itest==0)
{printf("Gefechtsfuehrung beendet.");
return 0;}
i=StringLaenge(szString);
printf("\n\n%d", i);
if (StringPruefung(szString, i)==0)
{printf("Ätsch!");
return 0;}
printf("\nWählen sie einen Schlüssel zur bearbeitung der Eingabe. Wert <= 94\n"); //Schlüssel Eingabe und Kontrolle
scanf("%d", &ikey);
if ((ikey>94)||(ikey<1))
{
printf("\nFalsche Eingabe, Programm wurde beendet.\n");
return 0;
}
printf("Um zu verschlüsseln drücken sie die eins,\num zu dechiffrieren die 2,\num zu beenden die drei\n");
scanf(" %c", &ca);
switch(ca)
{ case '1': {
Verschluesseln (szString, i, ikey);
}
break;
case '2' : {
Entschluesseln(szString, i, ikey);
}
break;
case '3' : return 0;
break;
default: { printf("Sie haben einen falschen Wert eingegeben.\nBitte starten Sie das Programm erneut.\n");
return 0;
}
break;
}
strcpy(szCopy,szString);
Verdrehen(szCopy, i);
Ausgabe(szCopy,ca);
}
}
länger her, aber da bin ich mal wieder.
Ich habe dieses Programm für die Uni geschrieben, dass im Großen und Ganzen auch Funktioniert.
Ich habe jetzt allerdings das Problem, dass die große while Schleife beim ersten Durchlauf einwandfrei läuft, beim zweiten Durchlauf, aber kein String mehr über gets eingelesen wird.
Das Programm verhält sich dann so, als ob das gets() dort gar nicht stünde.
Ist das normal für gets(); oder kann ich diesen Fehler irgendwie umgehen?
Danke im Voraus
Hier spendiere ich mal den Code:
#include <stdio.h>
#include <string.h>
#define length 160
int StringLaenge(char *szString)
{ int i=0, ia='a';
while(ia!=0) // Ermittlung der Länge des Strings
{ia= szString;
i++;
}
--i;
return i;
}
int StringPruefung (char *szString, int i)
{ int ib=0;
for(ib=0; ib<i; ib++) //Eingabekontrolle
{ if((szString[ib]>=32)&&(szString[ib]<=126))
ib++;
else
{
printf("\nFalsche Eingabe, Programm wurde beendet.\n");
return 0;
}
}
}
void Einlesen (char *szString)
{
gets(szString);
}
void Ausgabe(char *szString, char cWahl)
{switch(cWahl)
{case '1': {
printf("\nDer verschlüsselte Text ist: %s\n", szString);
}
break;
case'2': {
printf("\nDer dechiffrierte Text lautet: %s\n", szString); }
break;
}
}
char Verschluesseln (char *szString,int i, int ikey)
{int ic=0, ivar=0;
for(ic=0; ic<i; ic++)
{ivar = szString[ic];
if(ivar<127-ikey)
szString[ic] = ivar+ikey;
else
szString[ic] =ivar-94+ikey;
}
return szString[ic];
}
int Entschluesseln (char *szString, int i, int ikey)
{int id=0, ivar2=0;
for(id=0; id<i; id++)
{ivar2 = szString[id];
if(ivar2>=32+ikey)
szString[id] = ivar2-ikey;
else
szString[id] =ivar2+94-ikey;
}
return szString[id];
}
int Verdrehen(char *szString,int i)
{int izahl, ivar;
char szString2[i-1];
for(izahl=0; izahl<i; izahl++)
{ivar= szString[izahl];
szString2[i-izahl-1]=ivar;
}
return szString2[izahl];
}
int main ()
{
int i=0, ikey=0,itest=3;
char szString[length], ca, szCopy[length];
while(itest!=0)
{
printf("\nBitte einen Text eingeben mit max. 160 Zeichen, 'exit' um zu beenden.\n");
gets(szString);
itest=strncmp(szString, "exit",4);//test um zu beenden
if(itest==0)
{printf("Gefechtsfuehrung beendet.");
return 0;}
i=StringLaenge(szString);
printf("\n\n%d", i);
if (StringPruefung(szString, i)==0)
{printf("Ätsch!");
return 0;}
printf("\nWählen sie einen Schlüssel zur bearbeitung der Eingabe. Wert <= 94\n"); //Schlüssel Eingabe und Kontrolle
scanf("%d", &ikey);
if ((ikey>94)||(ikey<1))
{
printf("\nFalsche Eingabe, Programm wurde beendet.\n");
return 0;
}
printf("Um zu verschlüsseln drücken sie die eins,\num zu dechiffrieren die 2,\num zu beenden die drei\n");
scanf(" %c", &ca);
switch(ca)
{ case '1': {
Verschluesseln (szString, i, ikey);
}
break;
case '2' : {
Entschluesseln(szString, i, ikey);
}
break;
case '3' : return 0;
break;
default: { printf("Sie haben einen falschen Wert eingegeben.\nBitte starten Sie das Programm erneut.\n");
return 0;
}
break;
}
strcpy(szCopy,szString);
Verdrehen(szCopy, i);
Ausgabe(szCopy,ca);
}
}