需要关于在C、命令行参数中编写不同的循环的建议吗
我想写一个代码,如果用户输入一个非数字的命令行参数,就会弹出一条“用法:./caesar key\n”的消息 目前我只能接受一个好的命令行参数。问题是当用户在printf中键入多个字符(“Success\n”);和printf(“%s\n”,argv[1]);不断重复 我还希望,如果用户输入例如:“12x”,他们会收到一条错误消息“用法:./caesar key”,而不是循环给我“success”、“12x”、“success”、“12x”和“用法:./caesar key” 例如: ~/workspace/pset2/caesar/$。/caesar 12x=> 成功 12倍 成功 12倍 用法:./caesar键 我希望它只能是“用法:./caesar key”,而不是在只有一个非数字的情况下打印出来需要关于在C、命令行参数中编写不同的循环的建议吗,c,cs50,C,Cs50,我想写一个代码,如果用户输入一个非数字的命令行参数,就会弹出一条“用法:./caesar key\n”的消息 目前我只能接受一个好的命令行参数。问题是当用户在printf中键入多个字符(“Success\n”);和printf(“%s\n”,argv[1]);不断重复 我还希望,如果用户输入例如:“12x”,他们会收到一条错误消息“用法:./caesar key”,而不是循环给我“success”、“12x”、“success”、“12x”和“用法:./caesar key” 例如: ~/wor
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdbool.h>
int main(int argc, string argv [])
{
if (argc == 2)
{
int n = strlen(argv[1]);
for (int i = 0; i < n; i++)
{
if (isdigit(argv[1][i]))
{
printf ("Success\n");
printf ("%s\n", argv[1]);
}
else
{
printf ("Usage: ./caesar key\n");
}
}
}
else
{
printf ("Usage: ./caesar key\n");
}
}
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符串argv[])
{
如果(argc==2)
{
int n=strlen(argv[1]);
对于(int i=0;i
您的代码只对一个命令行参数起作用,因为总参数是两个。要回答您的问题,您还需要打印Success
,每当您发现一个字符是数字时,您可能需要做的是检查,如果您想使用这种方法,如果每个字符不是数字,那么您可以终止。您还可以使用strspn()
,检查字符串中的数字,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void usage(void)
{
fprintf(stderr,"Usage: ...\n");
return;
}
int main(int argc, char **argv)
{
int i = 1; /* Ignoring executable name */
char *digits = "0123456789";
if (argc >= 2)
{
for (; i < argc; i++)
{
if ((strlen(argv[i]) != strspn(argv[i], digits))) /* Checking if the length of the string is not equal to the matched numbers */
{
fprintf(stderr, "Invalid argument %s\n", argv[i]);
usage();
exit(EXIT_FAILURE);
}
}
}
else
{
fprintf(stderr, "Invalid number of arguments\n");
usage();
exit(EXIT_FAILURE);
}
return 0;
}
#包括
#包括
#包括
无效用法(void)
{
fprintf(标准,“用法:…\n”);
返回;
}
int main(int argc,字符**argv)
{
int i=1;/*忽略可执行文件名*/
char*digits=“0123456789”;
如果(argc>=2)
{
对于(;i
基本上,您检查字符串的长度是否不等于
子字符串的长度,该子字符串可以包含字符串中的任何数字,如果长度相等,您就知道字符串实际上只由数字组成。有关strspn()的详细信息,请参见以下方法:
- 如果使用
bool
类型,则声明一个初始化为1
或true
的标志
变量
- 使用循环检查不需要的条件,如果满足,则将
标志设置为0
或false
,并中断循环
- 循环结束后,使用条件
if(flag)
进行操作,以防一切正常
int标志=1;
对于(int i=0;i
当然,您可以根据自己的喜好命名标志
int onlyDigits=1
withif(onlyDigits)
将产生更可读的代码。您到底在问什么?如果我理解正确,您需要检查每个命令行参数中是否有非数字字符?不断重复。你是说它永不停止?显示的代码不会打印每个数字字符。如果只希望打印一次,则将其置于for
循环之外,并在第一个else
案例中添加return
。
int flag = 1;
for (int i = 0; i < n; i++) {
if( !(isdigit(argv[1][i])) ) {
printf ("Usage: ./caesar key\n");
flag = 0;
break;
}
}
if( flag ) {
printf ("Success\n");
printf ("%s\n", argv[1]);
}