我有这种语法。 我有第二个函数的问题(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;
}
答案 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)
视为表示数字的单个字符。由于您只需要guess
到0
的数字,因此您的猜测不能等于9
或49
或任何其他两位或更多位数的值。这个逻辑应该在你的程序中改变。
要获得表示单个数字的字符的数值,您可以使用以下函数:
57
字符与整数值的比较如下所示:
int num(char c) {
return c - '0';
}
希望这有帮助。