【问题标题】:Problem while checking if a string is a number in c检查字符串是否为c中的数字时出现问题
【发布时间】:2019-10-24 10:54:47
【问题描述】:

对于 CS50 类中的问题,我必须检查密钥是否有效,即用户输入的输入是否为数字。我尝试了不同的代码,但每次,如果输入中至少有一个数字,它就会返回密钥是正确的。虽然只有当字符串的所有字符都是数字时它才应该是正确的......

#include <cs50.h>
#include <stdio.h>
#include <string.h>
# include <ctype.h>

int main(int argc, string argv[])
{
    if (argc !=2)
    {
        printf("Usage: %s key\n", argv[0]);
        return 1;    
    }
    else 
    {   
        for (int i = 0; i <= (strlen(argv[1])); i++)
        {
            if (isalpha(argv[1][i]))
            {
                printf("Usage: ./caesar key \n");
                return 1;
            }

            else
            {
                printf("%s\n", argv[1]);
                return 0;
            }
        }
    }
}

当输入超过2个字符串时,应该返回1(即有效);

当字符串 [1] 不是数字时,它应该返回 1(也可以);

当字符串 [1] 是一个数字时,它应该打印 2 个字符串(不起作用);

例如:我期望./caesar 222f返回:用法:./caesar key,但实际输出的是222f

【问题讨论】:

  • 您的代码在返回之前只查看argv[1] 的第一个字符...

标签: c cs50


【解决方案1】:

您的代码只检查字符串的第一个字符 - 它总是根据第一个字符是否为数字来返回结果。

不是在循环中打印成功的结果,而是等待循环遍历所有字符,并且只有在找到非数字字符时才提前返回:

#include <cs50.h>
#include <stdio.h>
#include <string.h>
# include <ctype.h>

int main(int argc, string argv[])
{
    if (argc !=2)
    {
        printf("Usage: %s key\n", argv[0]);
        return 1;    
    }
    else 
    {   
        for (int i = 0; i <= (strlen(argv[1])); i++)
        {
            if (isalpha(argv[1][i]))
            {
                printf("Usage: ./caesar key \n");
                // Return early for badly formed argument
                return 1;
            }
        }

        // Now that all chars have been validated, print the argument
        printf("%s\n", argv[1]);
        return 0;
    }
}

【讨论】:

  • 试试argv[1] == "!"。这导致“所有字符都已验证”
猜你喜欢
  • 2017-07-22
  • 2013-08-16
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
相关资源
最近更新 更多