簡體   English   中英

CS50 如何修復錯誤:使用未聲明的標識符“i”?

[英]CS50 How to fix error: use of undeclared identifier 'i'?

我正在處理我的 PSet2 凱撒問題。 完成我的代碼后,這里是我得到的錯誤。 任何建議如何解決它們? 非常感謝。

caesar.c:46:10: error: use of undeclared identifier 'i'
    for (i = 0; i < strlen(plaintext); i++)

         ^
caesar.c:46:17: error: use of undeclared identifier 'i'
    for (i = 0; i < strlen(plaintext); i++)

                ^
caesar.c:46:40: error: use of undeclared identifier 'i'
    for (i = 0; i < strlen(plaintext); i++)

                                       ^
caesar.c:48:31: error: use of undeclared identifier 'i'
        if (isupper(plaintext[i]))

                              ^
caesar.c:50:39: error: use of undeclared identifier 'i'
            printf("%c", (((plaintext[i] - 65) + k) %26) + 65);

                                      ^
caesar.c:52:36: error: use of undeclared identifier 'i'
        else if (islower(plaintext[i]))

                                   ^
caesar.c:54:39: error: use of undeclared identifier 'i'
            printf("%c", (((plaintext[i] - 97) + k) %26) + 97);

                                      ^
caesar.c:58:36: error: use of undeclared identifier 'i'
            printf("%c", plaintext[i]);
#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, string argv[])
{
    //Check that there is one command-line argument
    
    if (argc != 2)
    {
        printf ("Usage: ./caesar key\n");
        return 1;
    }
    else printf ("Success!\n");
    
    //Define the key 
    
    string key = argv[1];
    
    //Check if input is a digit
    
    for (int i = 0; i < strlen(argv[1]); i++)
    {
        if (!isdigit(argv[1][i]))
        {
            printf ("Usage: ./caesar key\n");
            return 1;
        }
        else printf ("Success!\n%s\n", key);
    }
    
    //Get plain text from user
    
    string plaintext = get_string("Plaintext: ");
    
    //Define key
    
    int k = atoi(key);
    printf("ciphertext: ");
    
    //Obtain ciphertext
    
    for (i = 0; i < strlen(plaintext); i++)
    {
        if (isupper(plaintext[i]))
        {
            printf("%c", (((plaintext[i] - 65) + k) %26) + 65);
        }
        else if (islower(plaintext[i]))
        {
            printf("%c", (((plaintext[i] - 97) + k) %26) + 97);
        }
        else
        {
            printf("%c", plaintext[i]);
        }
    }
    printf("\n");
}

“使用未聲明的標識符'i'”意味着您在使用之前沒有聲明標識符i - 編譯器無法識別該名稱。

在這種情況下,代碼應該是for (int i = 0; ...

很高興看到你在做 cs50。 你錯過了一點,但很重要的事情。 由於您沒有在任何循環之外聲明變量i ,因此,它僅適用於該循環。 所以,當你在循環之外的任何地方使用它時,它實際上是未聲明的變量,這就是這里發生的事情。 因此,您也需要在最后一個for循環中聲明i 我附上了修改后的代碼。

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

int main(int argc, string argv[])
{
//Check that there is one command-line argument

if (argc != 2)
{
    printf ("Usage: ./caesar key\n");
    return 1;
}
else printf ("Success!\n");

//Define the key 

string key = argv[1];

//Check if input is a digit

for (int i = 0; i < strlen(argv[1]); i++)
{
    if (!isdigit(argv[1][i]))
    {
        printf ("Usage: ./caesar key\n");
        return 1;
    }
    else printf ("Success!\n%s\n", key);
}

//Get plain text from user

string plaintext = get_string("Plaintext: ");

//Define key

int k = atoi(key);
printf("ciphertext: ");

//Obtain ciphertext

for (int i = 0; i < strlen(plaintext); i++) // declared i
{
    if (isupper(plaintext[i]))
    {
        printf("%c", (((plaintext[i] - 65) + k) %26) + 65);
    }
    else if (islower(plaintext[i]))
    {
        printf("%c", (((plaintext[i] - 97) + k) %26) + 97);
    }
    else
    {
        printf("%c", plaintext[i]);
    }
}
printf("\n");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM