我正在运行一个条件循环来迭代数组以验证用户是否只输入了数字。当我与 NULL 进行比较时出错

问题描述 投票:0回答:1

正如标题所说。我正在制作一个程序,它接受用户的命令行参数并对消息进行加密。在用户输入消息之前,他们需要创建一个只能包含数字的“加密”密钥。

因此,在做任何事情之前,我必须检查他们是否只输入了数字。

据我了解,

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"
交换。仍然收到类似/相同的错误。

(对糟糕的语法和/或糟糕的英语表示歉意。因为它不是我的母语)

arrays c pointers null char
1个回答
0
投票

argc <= 1
时,
argv[2]
不确定。

而是测试

argc
以查看参数数量是否正确。

int main(int argc, string argv[]) {
    // if(argv[2] != NULL) {
    if(argc != 1) {
        printf("Usage: ./caesar key");
© www.soinside.com 2019 - 2024. All rights reserved.