如果c中的char数组的语句

时间:2013-12-14 11:20:11

标签: c arrays function syntax char

我有这种语法。 我有第二个函数的问题(validateGuess) 这个函数应该取消用户引入程序的char。 我做了一个功能,如果不是0-9之间的字母(主要),再次向用户询问。 但如果放了一封信,程序会要求用户再写一次。 但如果我把一个像22这样的数字,程序不会再次向用户询问,因为我不知道如何将输入限制为1位数。 重要的是要说我的老师要求我们制作一个char数组而不是int数组。 我需要if语句只在​​函数中检查它。如果它返回1是合法的号码,如果是返回0是非法的,应该再写。

这是语法:

#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
void GenerateCode(char code[SIZE]);
int validateGuess(char guess[]);

void main ()
{
    int i;
    char code[SIZE]={0};
    char input[SIZE]={0};
    GenerateCode(code);
    printf("Write your guess please\n");
    for(i=0;i<SIZE-1;i++)
    {
    scanf("%s",&input[i]);
    if(validateGuess(&input[i])==0)
        {
            printf("Wrong input, put a number between 0 to 9\n");
            i--;
        }
    }

    system("pause");
}

void GenerateCode(char code[SIZE])
{
    int i;
    for(i=0;i<SIZE;i++)
    {
        code[i]=rand()%10;
    }
}

int validateGuess(char guess[])
{
    int validateGuess=0;
    if((guess[0]>=49) && (guess[0]<=57))
        validateGuess=1;

    return validateGuess;
}

2 个答案:

答案 0 :(得分:1)

您不能限制用户的输入,至少不是这样。但你可以使用像getline函数这样的东西从你的流中读取一行(stdin我猜)并使用strlen检查它的长度。如果输入的大小不正确,请再次询问输入,直到得到所需的为止。

答案 1 :(得分:0)

我不会提供完整的解决方案,但是我想在您的代码中指出一些错误,以便您可以逐步解决此问题:

  • 数组初始化char code[SIZE]={0};是多余的,因为声明char code[SIZE];将声明一个SIZE元素数组 - 无论如何都设置为0

  • 调用scanf("%s", &input[i]);告诉scanf读取一串字符并将该字符串放入char数组位置。您想在此处阅读单个char,表示单个数字,因此请使用%c代替%s。这将截断用户提供的除第一个字符外的所有输入。因此输入33将存储3,输入123将存储1,依此类推。

  • 此测试if(validateGuess(&input[i])==0)input[i]地址传递给validateGuess,而不是{{1}的内容 }}。要传递内容,请不要使用一元input[i]运算符。

  • &的签名更改为validateGuess()并更改其正文以将validateGuess(char guess)视为表示数​​字的单个字符。由于您只需要guess0的数字,因此您的猜测不能等于949或任何其他两位或更多位数的值。这个逻辑应该在你的程序中改变。

要获得表示单个数字的字符的数值,您可以使用以下函数:

57

字符与整数值的比较如下所示:

int num(char c) {
    return c - '0';
}

希望这有帮助。