I use argv[] to get input from the user. Now I want to use argv[1] as intager in another function. So my variable is int k = atoi(argv[1]) defined in main, like you can see it in my code. But I don't know who I can pass this variable to the function called rotate. Up to this moment I only found answers using pointer which I don't know anything about since I am still new to C and programming. Thanks for your help!
Edit: You can ignore my German comments in the code 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;
}
CodePudding user response:
- If you only want to use its value you need to pass it as a parameter
example:
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
- If you want to modify it in the function you need to pass pointer to this variable. Example:
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
You can pass as many parameters as you need to the function. Example:
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);
}
https://godbolt.org/z/Kz9drfPq7
CodePudding user response:
You can pass k as a parameter to rotate just as how argc and argv are passed to main. You just need to change the function signature of rotate to int rotate(string newletter, int k), and then when you call rotate you need to do
int encipher = rotate(input, k);
