我撰寫了這段代碼并在 if 鏈中宣告了 c 變數,但是編譯器給了我一個錯誤,說你沒有宣告這個變數。`
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
int k = atoi(argv[1]);
printf ("%i\n", k);
string p = get_string ("Plaintext: \n");
for (int i = 0; i < strlen(p); i )
{
if (isalpha(p[i]))
{
if (islower(p[i]))
{
char c = (((p[i] - 97) k) % 26) 97;
return 0;
}
else if (isupper(p[i]))
{
char c = (((p[i] - 65) k) % 26) 65;
return 0;
}
else{
char c = (((p[i] - 65) k) % 26) 65;
}
p[i] = c;
}
}
printf ("%s\n", p);
return 0;
}
` test2.c:在函式'main'中:test2.c:34:20:錯誤:'c'未宣告(在此函式中首次使用)34 | p[i] = c; | ^ test2.c:34:20: 注意:每個未宣告的識別符號對于它出現的每個函式只報告一次
uj5u.com熱心網友回復:
'If' 塊本身是一個范圍,并且您定義了一個范圍,并且變數只能在范圍內訪問,不能在外部訪問,也不能在邊界處訪問。
當然,c 變數應該在 For 回圈之外宣告:
char c = ' ';
for ...
uj5u.com熱心網友回復:
錯誤將發生在以下行:
p[i] = c;
這是因為c本地范圍位于以下行:
if (islower(p[i]))
{
char c = (((p[i] - 97) k) % 26) 97;
return 0;
}
和
{
char c = (((p[i] - 65) k) % 26) 65;
return 0;
}
和
else{
char c = (((p[i] - 65) k) % 26) 65;
}
本地作用域意味著它會在退出}.
此外,在 , 的前 2 個條件之后if,else if也有return對 的定義值c。如果是這樣,API 將立即回傳并且c不會在任何行使用,因為分配p[i] = c;不會執行。
uj5u.com熱心網友回復:
您將 c 宣告為本地范圍!所以你應該在這樣的if陳述句之前宣告 c :
if (isalpha(p[i]))
{
char c = 0;
if (islower(p[i]))
{
c = (((p[i] - 97) k) % 26) 97;
return 0;
}
else if (isupper(p[i]))
{
c = (((p[i] - 65) k) % 26) 65;
return 0;
}
else{
c = (((p[i] - 65) k) % 26) 65;
}
p[i] = c;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520270.html
標籤:Clinux变量
上一篇:C語言:是否可以在dowhile回圈中輸入“是”?[復制]
下一篇:如何用C語言解決這個陣列問題?
