Δημοσιεύτηκε: 28 Αύγ 2011, 01:58
Θέλει ξεχωριστό έλεγχο για το αν είναι μονός ο αριθμός των χαρακτήρων... δεν αξίζει τον κόπο. Μια χαρά είναι κι έτσι 
@stamatiou: Αφενός είχες πρόβλημα στις συνθήκες των do-while κι αφετέρου είχες πρόβλημα και με το line-buffering λόγω των scanf που χρησιμοποιούσες. Άλλαξα τον κώδικά σου ώς εξής (ως συνήθως, έκανα κι άλλες αλλαγές
)
@stamatiou: Αφενός είχες πρόβλημα στις συνθήκες των do-while κι αφετέρου είχες πρόβλημα και με το line-buffering λόγω των scanf που χρησιμοποιούσες. Άλλαξα τον κώδικά σου ώς εξής (ως συνήθως, έκανα κι άλλες αλλαγές
- Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#define MAXINBUF 1000+1
// ------------------------------------------------------------------------------------
/*** UNUSED
int len( char *s )
{
int i = 0;
while ( *s++ )
i++;
return i;
}
***/
// ------------------------------------------------------------------------------------
char *s_get(char *s, size_t len)
{
char *cp;
for (cp=s; (*cp=getc(stdin)) != '\n' && (cp-s) < len-1; cp++ )
;
*cp = '\0';
return s;
}
// ------------------------------------------------------------------------------------
void cipher( char *s, int key )
{
while( *s )
*s++ ^= key;
return;
}
// ------------------------------------------------------------------------------------
void decipher( char *s, int key )
{
while(*s)
*s++ ^= key;
return;
}
// ------------------------------------------------------------------------------------
int main( void )
{
int tool, key;
char s[ MAXINBUF ] = "", inbuf[ MAXINBUF ] = "";
printf("Επιλέξτε Εργαλείο\n-------------------\n1. Κρυπτογράφηση\n2. Αποκρυπτογράφηση\n-------------------\n> ");
s_get(inbuf, MAXINBUF);
tool = atoi( inbuf );
// Cipher
if (tool == 1)
{
do { // read s
printf("\nΚείμενο προς κρυπτογράφηση (έως 1000 χαρακτήρες): ");
s_get(s, MAXINBUF);
} while (*s == '\0');
do { // read key
printf("Εισάγετε κλειδί: ");
s_get(inbuf, MAXINBUF);
key = atoi( inbuf );
} while ( *inbuf == '\0' || key == 0);
cipher(s, key);
puts( s );
}
// Decipher
else if (tool == 2)
{
do { // read s
printf("\nΕισάγετε το κρυπτογραφημένο κείμενο: ");
s_get(s, MAXINBUF);
} while (*s == '\0');
do { // read key
printf("Εισάγετε το κλειδί κρυπτογράφησης: ");
s_get(inbuf, MAXINBUF);
key = atoi( inbuf );
} while ( *inbuf == '\0' || key == 0 );
decipher(s, key);
puts( s );
}
// Error
else
puts("Invalid option");
return 0;
}