C语言 为什么我的代码输出不正确(我只想接收整数作为键)?



为什么我的代码输出不正确(我只想接收整数作为键(?

在下面的代码中,我想对计算机说的是"只接受int作为键,否则拒绝键"。

int main(int argc, string argv[])                           //command line argument
{
for ( int i = 0; i< strlen(argv[1]); i++)
{
if (argc != 2)                                            //correct argument count
{
printf ("usage: ./caesar keyn");
return 1;
}
else if(isdigit(argv[1][i]))
{
printf("successn");
}
else if(isalpha(argv[1][i]))
{
printf ("usage: ./caesar keyn");
return 1;
}
}  

但是,当我尝试不同的输入来测试代码的准确性时,就会发生这种情况:

~/caesar/ $ ./caesar 4r       //<--mix of outputs.i don't want 'success' here bc input has a letter
success
usage: ./caesar key
~/caesar/ $ ./caesar g5       //correct output
usage: ./caesar key
~/caesar/ $ ./caesar r        //correct output
usage: ./caesar key

如您所见,当我输入一个字母然后输入一个 int 时,它工作正常,但是当我做相反的操作(int 然后是字母(时,它会给我一个混合输出,拒绝和接受输出。

你的问题来了,因为虽然第一个字符是数字,但你为每个字符打印"成功",你必须等待你检查所有字符来决定你的成功

还要注意做的事

循环内的
if (argc != 2)                                            //correct argument count
{
printf ("usage: ./caesar keyn");
return 1;
}

是无用的,请在循环之前移动它

strlen(argv[1])每个回合都是白费

你想要这样的东西:

int main(int argc, string argv[])                           //command line argument
{
if (argc != 2)
{
printf ("usage: %s keyn", *argv);
return 1;
}
for (int i = 0; argv[1][i] != 0; i++)
{
if(!isdigit(argv[1][i]))
{
printf ("usage: %s keyn", *argv); // better to say the key is not an integer
return 1;
}
}  
puts("success");
return 0;
}

我想一个负整数被拒绝,并且接受的整数的大小没有限制(由于溢出,int可能不够(

编译和执行:

pi@raspberrypi:/tmp $ gcc -Dstring="char*" -Wall c.c
pi@raspberrypi:/tmp $ ./a.out 123
success
pi@raspberrypi:/tmp $ ./a.out 1a
usage: ./a.out key
pi@raspberrypi:/tmp $ ./a.out a1
usage: ./a.out key
pi@raspberrypi:/tmp $ ./a.out ""
success

如果参数为空,必须做什么? 目前它是成功的,但可能一定不是,所以一种方法是替换

if (argc != 2)

if ((argc != 2) || !argv[1][0])

相关内容

最新更新