如何处理 C 中未使用的数组空间



我正在研究凯撒密码,一切似乎都很好,除了在我的句子末尾,我添加了一大堆非字母数字胡言乱语。我几乎肯定这是由于有额外的数组空间,但我需要允许用户输入 100 个字符,而 C 似乎没有等效的数组列表,所以我不确定如何摆脱这个问题。 这是我的代码

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

int main ()
 { 
    /* Declare variables to store sentence and shift number. 
       i is used for loops, mod temporarily stores input[i] + shift */
    char input[100];
    int mod;
    int shift;
    int i=0 ;
    printf("sentence "); 
    fgets(input, 100, stdin); //fgets stores user input for sentence
                              //while setting a maximum size
    // prompts user to set shift, then mods it to ensure shift stays
    // between 0-26
    printf("n Number");
    scanf( "%d" , &shift);
    shift = shift % 26;
    //printf( "%d", input[1]);
    /* loops. for loop scans through input, and if statements
     * insure input[i] is an alphabet letter and classify
     * it to the letter's respective case. */
    for ( i =0 ; i < 100 ; i++) { 
        if ( isupper(input[i])) { 
            mod = input[i] + shift; 
            if (mod > 90) { mod -= 26;}
            if (mod < 65) { mod += 26;}
            printf( "%c", mod );  }
        else if( islower(input[i])) {
            mod = input[i] + shift; 
            if (mod > 122) { mod -= 26;}
            if (mod < 97) { mod += 26;}
            printf( "%c", mod );  }
        // my unsuccesful attempt at ignoring empty array spaces
        else if ( input[i] != 000) { 
            printf( "%c", input[i]); 
        }
    }
    return 0;
 }

无论字符串长度如何,您都处理了 100 个字符。因此,与其循环遍历 100 个字符,不如仅检查字符串的长度。

for ( i =0 ; i < strlen(input) ; i++) { ... }

相关内容

  • 没有找到相关文章

最新更新