[英]How can I use a variable defined in main in another function? C
我使用argv[]
來獲取用戶的輸入。 現在我想在另一個 function 中使用argv[1]
作為整數。 所以我的變量是int k = atoi(argv[1])
在main
中定義的,就像你在我的代碼中看到的那樣。 但我不知道誰可以將此變量傳遞給名為rotate
的 function 。 到目前為止,我只使用我一無所知的pointer
找到了答案,因為我對 C 和編程還是新手。 謝謝你的幫助!
編輯:您可以忽略我在代碼 xD 中的德語評論
#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
bool only_digits(string digits);
int rotate(string newletter);
int main(int argc, string argv[])
{
int checkfordigits = only_digits(argv[1]);
if (argc != 2)
{
printf("Usage ./caesar key\n");
return 1;
}
else if (checkfordigits == 1)
{
printf("Usage ./caesar key\n");
return 1;
}
int k = atoi(argv[1]);
string input = get_string("plaintext: ");
int encipher = rotate(input);
}
bool only_digits(string digits)
{
for (int i = 0, j = strlen(digits); i < j; i++)
{
if (!isdigit(digits[i]))
{
return 1;
}
else if (isdigit(digits[i]))
{
//Kann das hier leer bleiben
}
}
//weshalb brauche ich hier return?
return 0;
}
//Soll aus dem input plaintext den geheimtext machen, um argv[1] im alphabet verschoben
int rotate(string newletter)
{
int shiftletter = 1;
for (int i = 0, j = strlen(newletter); i <= j; i++)
{
if (isalpha(newletter[i]) && isupper(newletter[i]))
{
//Erst aus ASCII alphabetical index machen damit buchstaben 0-25 sind statt 65+
newletter[i] -= 65;
newletter[i] = ((newletter[i] + shiftletter) % 26);
newletter[i] += 65;
}
else if (isalpha(newletter[i]) && islower(newletter[i]))
{
newletter[i] -= 97;
newletter[i] = ((newletter[i] + shiftletter) % 26);
newletter[i] += 97;
}
else
{
newletter[i] += 0;
}
}
printf("ciphertext: %s\n", newletter);
return 0;
}
例子:
void foo(int x)
{
x += 1;
printf("x = %d\n", x);
}
int main(void)
{
int y = 5;
foo(y);
printf("y = %d\n", y);
}
https://godbolt.org/z/KrcPh473j
void foo(int *x)
{
*x += 1;
printf("x = %d\n", *x);
}
int main(void)
{
int y = 5;
foo(&y);
printf("y = %d\n", y);
}
https://godbolt.org/z/rEWfzjq98
您可以將任意數量的參數傳遞給 function。 例子:
void foo(int x, int y, int z)
{
printf("sum = %d\n", x * y * z);
}
int main(void)
{
int a = 1, b = 2, c = 3;
foo(a,b,c);
}
您可以將 k 作為參數傳遞給rotate
,就像將argc
和argv
傳遞給main
一樣。 您只需將旋轉的 function 簽名更改為 int rotate
int rotate(string newletter, int k)
,然后當您調用rotate
時,您需要執行
int encipher = rotate(input, k);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.