我无法从命令行参数argv [1]仅接受字母字符。如果我在数字后面插入字母,则可以接受此输入,但我只需要接受字母即可。因此,如果用户输入类似“ Jack23”的内容,则我需要显示为与“ 32214”相同的错误。到目前为止,即使起始数字是字母,它也可以接受输入,就算整个字符串由字母组成,即使存在数字也是如此。这是我到目前为止的内容:
#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main(int argc, string argv[])
{
string plain_text;
string key = argv[1];
if (argc == 2)
{
// checks each character from second argument to see if it is an alphabetical character
for (int i = 0, k = strlen(key); i < k; i++)
{
//if a non-alphabetical character is detected, the user is reprompted to enter a valid key
if (!isalpha(key[i]))
{
printf("error, non alphabetic input detected, please input valid key");
return 1;
}
// if user enters correct alphabetical key then we proceed with the request for valid plain text
else
{
plain_text = get_string("plaintext: ");
}
}
}
else
{
printf("error, please input two arguments! Ex: ./test Try");
}
}
答案 0 :(得分:3)
目前,当起始字符为字母时,即使存在数字,它也会接受整个字符串由字母组成的输入。
您的问题是此循环,我删除了注释以使问题更清楚:
for (int i = 0, k = strlen(key); i < k; i++)
{
if (!isalpha(key[i]))
{
printf("error, non alphabetic input detected, please input valid key");
return 1;
}
else
{
plain_text = get_string("plaintext: ");
}
}
该循环将在字符串中找到字母字符后立即调用get_string("plaintext: ")
。
您要将else
部分移出循环,并让循环验证 entire 输入字符串。
for (int i = 0, k = strlen(key); i < k; i++)
{
if (!isalpha(key[i]))
{
printf("error, non alphabetic input detected, please input valid key");
return 1;
}
}
plain_text = get_string("plaintext: ");