2014-12-07 2 views
0

Я написал эту простую программу для назначения, но когда я ввожу свой текст, вывод дает мне символы вместо символов. любая помощь будет оценена по достоинству. Я не знаю, почему мой вывод появляется таким образом, но программа, похоже, компилируется в порядке. Возможно, он работает, и мне нужно просто провести базовый тест с математикой, чтобы убедиться, что он работает правильно. В любом случае, если кто-либо видит ошибки в этом, отзывы очень ценятся.Символы ASCII, пропущенные в простой программе C

#include <stdio.h> 
#include <cs50.h> 
#include <stdlib.h> 
#include <ctype.h> 

string Crypto(string, int); // rotation 


int main(int argc, string argv[]) 
    { 
    int k = 0; 
    // error checing 
    if (argc == 0 || argc == 1 || argc > 2) 
    { 
     // get mad 
     printf("Enter 1 integer as an argument. Stop messing around!\n Try Again: "); 
     return 1; 
    } 
    else 
    { 
     //create command line arguments to be stored into k 
     k = atoi(argv[1]); 
     k = k * 1; 
    } 

    // Get text to be encrypted 
    printf("Enter the text you want to encrypt: \n"); 
    string a = GetString(); 

    string b = Crypto(a, k); 
    printf("%s\n", b); 

    return 0; 
} 

//Now let's get cryptic 
string 
Crypto(string a, int k) 
{ 
    int c = 0; 
    for (int i = 0, n = strlen(a); i < n; i++) 
    { 
     if(a[i] >= 65 && a[i] <= 90) 
     { 
      c = ((26 - (91 - a[i] + k) % 26)); 
      a[i] = c + 'A'; 
     } 
     else 
     { 
      c = ((26 - (123 - a[i] + k % 26))); 
      a[i] = c + 'a'; 
     } 
    } 
    return a; 
    } 
+0

Pranav получил меня на правильном пути. Мне нужна была строка [strlen (a) + i + 1] = '\ 0'; – cbanowsky

+0

Наблюдение: 'argc' является правильным, если оно равно 2, которое наиболее просто и точно написано как' if (argc! = 2) '(а не' if (argc == 0 || argc == 1 || argc> 2) '). –

ответ

1

В функции Crypto, вам нужно приложить \0 (NULL) символа для обозначения конца строки. Незадолго до return a; напишите заявление a[i+1] = '\0';.