c - 仅在 C 中验证字母输入
问题描述
我无法从命令行参数 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");
}
}
解决方案
截至目前,当开始字符是字母时,它接受输入,就好像整个字符串由字母组成,即使存在数字也是如此。
你的问题是这个循环,我删除了评论以明确问题:
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
部分移出循环并让循环验证整个输入字符串。
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: ");
推荐阅读
- python - 类型错误:'在
' 需要字符串作为左操作数,而不是字节,python - caching - CloudFront / S3 ETag:CloudFront 是否可以在 CF TTL 过期之前发送更新的 S3 对象?
- node.js - 如何在 linode 端口 80 上部署 nodejs 应用程序?
- docker - Gitlab-runner dind 导致错误:作业失败(系统故障):来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:380:
- javascript - 将 JSON 数据写入 JSON 文件并使用 FS 读取
- methods - 空指针异常错误作为方法参数
- c - 您如何在 C 头文件中转发声明“bool”类型?
- python - 按特定列对 pandas df 行子集(在组内)进行排序
- javascript - 如何在 Javascript 中编辑 json 数组中的特定值
- javascript - 文档更改时如何调用函数?