c - isdigit 函数未捕获 argv[] 中的混合值
问题描述
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// check for correct 1 integer argument else print instructions
if (argc == 2 && isdigit(*argv[1]))
{
printf("plaintext: ");
printf("rawtext: ");
return 0;
}
else
{
printf("Usage: [KEY]\n");
return 1;
}
}
如果用户输入 ./program 2z 但 isdigit 没有捕捉到“z”,程序应该打印“Usage: [KEY]”。有没有办法纠正这个问题,或者还有其他替代 isdigit 函数的方法吗?
解决方案
您需要isdigit()
循环调用,测试每个字符,因为它一次只检查一个字符。
if (argc == 2 && argv[1][0]) {
for (int i = 0; argv[1][i]; i++) {
if (!isdigit(argv[1][i]) {
printf("Error: key must be numeric\n");
return 1;
}
}
printf("plaintext: ");
printf("rawtext: ");
return 0;
} else {
printf("Usage: %s key\n", argv[0]);
return 1;
}
推荐阅读
- javascript - 如何为每个唯一用户而不是 localStorage 实现持久化?
- r - 将一个向量与另一个向量的每个元素进行比较
- python - AttributeError:“NoneType”对象在覆盆子的速度监视器中没有属性“组”
- swiftui - 如何在 SwiftUI 中将 Closure 定义为 Button 的操作?
- python - 我对我的 python 代码的一部分感到困惑
- bash - TMUX - 分离时窗格大小调整不起作用?
- influxdb - 测量系列的持续时间 - InfluxDB 1.8
- node.js - 如何为 nodejs 运行启动命令,在 Azure 上表达 js 项目?
- python - 如何制作一个不会在列表中添加和元素的列表?
- linux - jenkins中的备份插件无法恢复linux中的backupzip