2014-12-07 22 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 2014-12-07 06:43:30

+0

观察:'argc'只有当它是2时才是正确的,它最简单准确地写为'if(argc!= 2)'(而不是'if(argc == 0 || argc == 1 || argc> 2)')。 – 2016-08-26 21:56:59

回答

1

在功能Crypto,则需要附加\0(空)字符以表示字符串的结尾。在return a;之前,写一条a[i+1] = '\0';声明。