正如标题所说。我正在制作一个程序,它接受用户的命令行参数并对消息进行加密。在用户输入消息之前,他们需要创建一个只能包含数字的“加密”密钥。
因此,在做任何事情之前,我必须检查他们是否只输入了数字。
据我了解,
argv[]
只能是存储字符串值的数组。
因此,为了防止运行时错误,我不能这样做
int key = argv[1]
,否则如果它是字符串,则会遇到错误。
现在这是我的代码,用于检查用户输入的参数是否有效。
#include<stdio.h>
#include<cs50.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
bool verification(string array[]);
// ask the user for a key.
int main(int argc, string argv[])
{
if(argv[2] != NULL)
{
printf("Usage: ./caesar key");
return 1;
}
else if(verification(argv) == false)
{
printf("Usage: ./caesar key");
return 1;
}
else if(verification(argv) == true)
{
printf("works");
}
}
//verification for all character is a digit
bool verification(string array[])
{
int i = 0;
bool status = true;
while(array[1][i] != NULL || status == true )
{
if(array[1][i] <= '9' && array[1][i] >= '0')
{
status = true;
i += 1;
}
else
{
status = false;
}
}
return status;
}
// ask for the plain text
// rotate the message to the assigned key letter
// use the formula Ci = (Pi + k) % 26
// display the text
我现在解释一下这部分代码:
int i = 0;
bool status = true;
while(array[1][i] != NULL || status == true )
变量
i
是将用于迭代数组的索引号。通过使用 array[1][i]
我正在迭代数组第一个数据中的所有字符。据我了解,在所有字符串(显然可以像数组一样对待)的末尾有一个 \0
或所谓的 NULL。所以我想继续运行循环,直到程序遇到一个字母(这会将 status
设置为 false
)或者它们迭代了最后一个字符并遇到了 \0
。
然而,这似乎不起作用,这非常令人沮丧,因为
if(argv[2] != NULL)
程序顶部的这一行确实有效。
当我尝试制作程序时,出现如下错误:
错误:指针和整数之间的比较('char'和'void*')
我还尝试将 NULL 与带引号和不带引号的
"\0"
交换。仍然收到类似/相同的错误。
(对糟糕的语法和/或糟糕的英语表示歉意。因为它不是我的母语)
当
argc <= 1
时,argv[2]
不确定。
而是测试
argc
以查看参数数量是否正确。
int main(int argc, string argv[]) {
// if(argv[2] != NULL) {
if(argc != 1) {
printf("Usage: ./caesar key");