【问题标题】:About passing a char[] to isdigit()关于将 char[] 传递给 isdigit()
【发布时间】:2020-03-25 13:26:29
【问题描述】:

我目前正在学习 C,我正在尝试创建一个程序,该程序检查用户输入的是字母还是整数:

#include <stdio.h>
#include <ctype.h>
int main()
{
    char a[256];
    printf("\n Please enter a number or a letter: ");
    scanf("%s", &a);
    if (isdigit(a[256]) == 1)
    {
        printf("\n %c is a number.", a);
        printf("\n The return value is %d.", isdigit(a[256]));
    }
    else if (isdigit(a[256]) == 0)
    {
        printf("\n %c is a letter.", a);
        printf("\n The return value is %d.", isdigit(a[256]));
    }
    getch();
    return 0;
}

但是,当我运行程序时,我得到的是:

Please enter a number or a letter: 15
15 is a letter.
The return value is 0.

或者这个:

Please enter a number or a letter: X
X is a letter.
The return value is 0.

我输入的任何输入总是返回相同的输出。我想传递一个 char 数组,以便程序接收整个输入(例如如果我输入“230”,程序不仅会检查“2”,还会检查“230”)。

【问题讨论】:

  • 您需要查看数组。 a[256] 指的是数组外部的内存位置。首先编写代码以在没有数组和没有输入(无扫描)的情况下执行此操作,只需使用常量即可。例如,首先 a = 'c' 和 a = '1'。然后尝试使用预先分配的数组 array[4] = "cat" 和 array[4] = "123"。一旦你有这个工作,添加输入。

标签: c arrays pointers variables error-handling


【解决方案1】:

不匹配类型(节省时间,启用所有警告),没有宽度限制,错误索引,错误比较(is...()返回值:只有0,不重要。),错误功能(使用isalpha()测试对于字母),通过了错误的范围。 (is...() 期望 EOF,0-255,而不是 char,可能是 -128-127)

#include <stdio.h>
#include <ctype.h>
int main()
{
    char a[256];
    printf("\n Please enter a number or a letter: ");
    // scanf("%s", &a);
    scanf("%255s", a);  // limit input, use matching type
    // if (isdigit(a[256]) == 1)
    if (isdigit((unsigned char) a[0]))
    {
        // printf("\n %c is a number.", a);
        printf("\n First character %c is a digit.", a[0]);
        // printf("\n The return value is %d.", isdigit(a[256]));
        printf("\n The return value is %d.", isdigit((unsigned char)a[0]));
    }
    // else if (isdigit(a[256]) == 0)
    else if (isalpha((unsigned char)a[0]))
    {
        // printf("\n %c is a letter.", a);
        printf("\n First character %c is a letter.", a[0]);
        // printf("\n The return value is %d.", isdigit(a[256]));
        printf("\n The return value is %d.", isdigit((unsigned char)a[0]));
    } 
    else
    {
        printf("\n Neither digit nor letter.");
    }
    getch();
    return 0;
}

【讨论】:

  • 这个程序只检测第一个字符。他或她想要传递一个 char 数组,以便程序接收整个输入(例如,如果我输入“230”,程序将不仅检查“2”,而且检查“230”)。
  • @Daniate 我读到“用户输入字母还是整数”(单数),并被引导相信只有 1 个字符很重要。我现在看到一个隐含的不同要求“我想传递一个 char 数组,以便程序接收整个输入(例如,如果我输入“230”,程序不仅会检查“2”,还会检查“230”)。 "让它成为任何人都可以修改的 wiki。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2019-12-11
  • 2012-07-26
相关资源
最近更新 更多