fix modulo when key is below 26
This commit is contained in:
		
							
								
								
									
										27
									
								
								src/crypt.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								src/crypt.c
									
									
									
									
									
								
							@@ -10,16 +10,39 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "crypt.h"
 | 
					#include "crypt.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Which of the two below functions is faster (find out!)
 | 
				
			||||||
 | 
					inline int mod(int a, int b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return (a % b + b) % b;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline int fast_mod(int a, int b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const int result = a % b;
 | 
				
			||||||
 | 
						return result >= 0 ? result : result + b;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Below two functions do NOT work for lower case letters (fix this!)
 | 
				
			||||||
void caesar_encrypt(char* str, int size, int key)
 | 
					void caesar_encrypt(char* str, int size, int key)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	for (int i = 0; i < size && str[i] != '\n'; i++)
 | 
						for (int i = 0; i < size && str[i] != '\n'; i++)
 | 
				
			||||||
		if (str[i] != ' ') str[i] += key % 26;
 | 
							if (str[i] != ' ')
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								str[i] += key - 65;
 | 
				
			||||||
 | 
								str[i] %= 26;
 | 
				
			||||||
 | 
								str[i] += 65;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void caesar_decrypt(char* str, int size, int key)
 | 
					void caesar_decrypt(char* str, int size, int key)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	for (int i = 0; i < size && str[i] != '\n'; i++)
 | 
						for (int i = 0; i < size && str[i] != '\n'; i++)
 | 
				
			||||||
		if (str[i] != ' ') str[i] -= key % 26;
 | 
							if (str[i] != ' ')
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								str[i] = str[i] - key - 65;
 | 
				
			||||||
 | 
								str[i] = mod(str[i], 26);
 | 
				
			||||||
 | 
								str[i] += 65;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user