CS50 PSET2:根本不知道如何实现 isalpha 以便检查每个命令行参数
Posted
技术标签:
【中文标题】CS50 PSET2:根本不知道如何实现 isalpha 以便检查每个命令行参数【英文标题】:CS50 PSET2 : Simply can't figure out how to implement isalpha so that each command line argument is checked 【发布时间】:2020-09-11 15:31:31 【问题描述】:我根本不知道为什么我不能让 isalpha 为 Vigenere 的任务工作。我尝试了很多不同的输入。我是一个完全的编程初学者 - 就像 - 绝对的初学者,所以我想知道你是否有任何想法。我也尝试将 argv 和 argc 放入 isalpha 中,但它仍然没有我想要的输出。如果使用的关键字不是字母,则用户必须看到错误。这是我的代码:
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, string argv[])
if (argc < 2)
printf("ERROR \n");
return 1;
if (! isalpha (k[i]))
else
string s = get_string("plaintext: ");
int k = atoi(argv[1]);
printf("ciphertext: ");
for (int i = 0, n = strlen(s); i < n; i++)
if (isalpha(s[i]))
printf("ERROR");
if isupper(s[i])
printf("%c", (((s[i] + k) - 65) % 26));
else if islower(s[i])
printf("%c", (((s[i] + k) - 97) % 26));
else
printf("%c", (s[i]));
printf("\n");
【问题讨论】:
【参考方案1】:您的源代码有许多错误。
if (! isalpha (k[i]))
else
这段代码有两个问题:
k 似乎是一个字符串,但在此用法之前从未声明 k。 如果 if 语句的计算结果为 TRUE,则不执行任何操作。 您似乎想要评估命令行参数以确定第一个字符是否为字母字符。您的程序不会评估命令行参数。它评估分配给 s 的用户输入的字符串。当第一个字符可能是字母字符时,您尝试将第一个命令行参数转换为整数:
int k = atoi(argv[1]);
目前我不确定你认为 k 包含什么,但无论你认为它是什么,你都错了。您可能希望将除第一个字符以外的所有字符都转换为 int。
argv[1][0] 是什么样的数据,假设在启动程序时正确使用了命令行参数?您是在寻找两个特定的字符,还是任何字母字符就足够了?
【讨论】:
以上是关于CS50 PSET2:根本不知道如何实现 isalpha 以便检查每个命令行参数的主要内容,如果未能解决你的问题,请参考以下文章