我的代码有啥问题? (Vigenere cypher cs50, pset2)

Posted

技术标签:

【中文标题】我的代码有啥问题? (Vigenere cypher cs50, pset2)【英文标题】:What's wrong in my code ? (Vigenere cypher cs50, pset2)我的代码有什么问题? (Vigenere cypher cs50, pset2) 【发布时间】:2016-10-27 01:07:38 【问题描述】:

我的 CS50 pset2 Vigenere 密码代码如下。我是 C 编程新手。

[收到一些建议后,我编辑了一次代码,这段代码(下)是我新编辑的代码。]

当我运行代码时,它会产生无限循环,并且不会产生应有的新加密文本。我可以就更正我的代码获得一些建议和意见吗? 谢谢,

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

int main(int argc, string argv[])

    if (argc != 2)   //if it is not rqual to 2, it gives an error message.
    
        printf("Enter the valid input : \n");
        return 1;
    

    if (argc == 2)   //if two commands are given then it proceeds to other step.
    
        string k =  argv[1];
        string m = GetString();
        int l =  strlen(k);
        int p =  strlen(m);



        for( int i = 0; i <= p ; i++ ) //it has to keep on rotating from 0 to len of string and back to zero and so on.
        
            
                i = i % l;
               


            if (isalpha(m[i]) && isalpha(k[i]))    // it proceeds ahead only if the input given is an alphabet, if the input is sth other than alphabet it prints exactly as it is.
            


                for(int t = 0; t <= p ; t++)
                
                    if(isupper(m[t])) // when is it capital letter.
                    
                        printf("%c", ( m[t] - 65 + k[i]) % 26 + 65);
                    
                    if(islower(m[t]))  // when it is small letter.
                    
                        printf("%c" , ( m[t] - 97 + k[i])% 26 + 97);
                    

                

            


            else //if it is not an alphabet it returns as it is.
            
                printf("%c",  m[i]);
            
            

    
        printf("\n");
        return 0;

【问题讨论】:

正如编译器所说,p 不是指针、数组或向量。这是int 【参考方案1】:

让我们看看错误。它说您提供的参数不是数组,而您将其用作数组。没错:p 是一个整数,而不是一个数组:

int p = strlen(msg);

使用 p[i] 意味着您要访问 p 数组的元素编号 i。但是不可能达到这个值,因为 p 只是一个整数变量,而不是一个数组。

您可能想用作数组的是您的字符串参数之一,键或消息。 CS50 中的字符串变量相当于经典 C 中的 char * 变量,用作字符数组。

【讨论】:

非常感谢。我学到了一些东西,我也纠正了它。现在它给了我更少的错误。我觉得我在循环中也犯了一些错误。 你做到了,因为你多次使用了 p[t] 和 l[i],这与我上面解释的基本相同。如果你纠正了这些,你应该没问题。 米莉史密斯,伊苏卡非常感谢。我犯了这么简单的错误真烦人。 你是 C 编程的初学者 :) 它会随着时间的推移而出现。

以上是关于我的代码有啥问题? (Vigenere cypher cs50, pset2)的主要内容,如果未能解决你的问题,请参考以下文章

我的 vigenere 密码加密功能有啥问题?

我的 CS50 Vigenere 密码程序有啥问题?

为啥我的 vigenere.c 不工作?

Java vigenere 密码性能问题

Python Vigenere 代码重复错误

Vigenere 没有在 python 中加密我的消息