如果有多个字符

时间:2017-01-31 13:01:03

标签: c++

所以,我还是新编码,我的朋友很好地教我很多,我想快速学习,然后他给我这个练习在我家学习 他给了我关于预订餐桌号码的问题,所以我试着去做.. 但是我在这部分检查表格号码时遇到了问题,如果它是一个数字或者没有...我在谷歌上搜索如何,但他们只举例说明如何用单个字符做..所以,我做了一个帐户然后问这里xD 顺便说一句,表格最大数量是25。

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

bool checkDigit(char tablenum){
    char digit[3];
    int n;
    int value = tablenum;
    if(tablenum>0 && tablenum<10)
        n=1;
    if(tablenum>9 && tablenum < 26)
        n=2;
    for(int i=0;i<n;i++){
        digit[i] = value%10;
        value /= 10;
    }
    if(n==1){
        printf("digit 0 = %d\nisdigit = %d\n",tablenum,isdigit(tablenum)); //just checking the isdigit value
        if(isdigit(digit[0])!=0){
            puts("It's digit");
            return true;
        }
        else{
            puts("It's not digit");
            return false;
        }
    }
    if(n==2){
        printf("digit 0 =  %d isdigit 0 = %d \ndigit 1 = %d isdigit 1 = %d\n",digit[0],isdigit(digit[0]),digit[1],isdigit(digit[1])); //checking the values too
        if(isdigit(digit[0]) != 0 && isdigit(digit[1]) != 0){
            puts("It's digits!");
            return true;
        }
        else{
            puts("It's not digits!");
            return false;
        }
    }
    else{
    printf("It's not digit!")
    return false;
    }
}

int main(){
    int num;
    bool itsdigit;
    do{
    scanf("%d",&num);fflush(stdin);

    itsdigit = checkDigit(num);

    }   while(itsdigit != 1 );
    getchar();
    return 0;
}

输入=“25”“1”“0”“测试”

输出=“这是一个数字”“这是一个数字”“这不是一个数字”“

由于表格仅为1至25

当我输入“1”时,它显示正确的数字,但是当它进入isdigit()时,我一直得到0。

我想知道这有什么不对,请解释一下。 谢谢你!

3 个答案:

答案 0 :(得分:2)

您有多个问题。

让我们先仔细看看这两行:

checkDigit(num);
itsdigit = checkDigit;

第一行调用 checkDigit,但会抛弃结果。

第二行调用该函数,而编译器会让它衰减到函数的指针并将该指针赋给itsdigit。你的编译器应该抱怨它。

此外,isdigit 当字符为数字时返回1,它只需要返回非零的内容。< / p>

最后,在digits数组中,您不存储字符,您可以存储整数值。如果isdigit(1)为真,isdigit('1')将为假。仅仅因为您使用类型char并不会自动在变量中存储字符。考虑到你读取一个整数,并将其数字存储在digits数组中,不需要检查数字是否实际为数字。当然,数字将是数字。

答案 1 :(得分:0)

你可能想要这个:

bool IsOnlyDigits(const char text[])
{
  int length = strlen(text);

  for (int i = 0; i < length; i++)
  {
    if (!isdigit(text[i]))
      return false;
  }

  return true;
}


int main() {
  char num[50];

  scanf("%s", num);

  if (IsOnlyDigits(num))
    puts("It's digits!");
  else
    puts("It's not digits!");

  fflush(stdout);
  getchar();
  return 0;
}

免责声明:非错误检查和非边界检查代码。为简洁省略#include。已经在Visual Studio 2015下进行了测试,似乎在这里工作正常。

输入和输出示例:

123
It's digits!

12a
It's not digits!

abc
It's not digits!    

要理解这一点,您需要了解字符串和数组。请阅读C教科书中相应的章节。

答案 2 :(得分:0)

您可以改为创建char或int类型的数组,遍历数组并使用isdigit()函数检查是否有任何字符实例是数字。

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
  char arr[10];
  cin>>arr;
  for(int i=0;i<strlen(arr);i++){
    if(isdigit(arr[i])){
        cout<<arr[i]<<" is a digit\n";
    }
    else {
        cout<<arr[i]<<" is not a digit\n";
    }
  }
  return 0;
}