这是我的代码。用户输入一个字符串,如果输入是1,2或*则显示错误。问题是满足所有数字的条件,其中第一个数字是1,2 amd 3。(11,12,22…)。我还使用strlen和sizeof函数计算数字并创建一个条件,但当我打印strlen时,输出是1每个号码。
我不知道问题是我的多种情况还是使用scanf
这是我的密码
#include < stdio.h >
int main (void)
{
char choice;
int i=0;
do
{
scanf("%s", &choice);
while(choice !='1' && choice !='2' && choice !='*' )
{
printf("error");
scanf("%s",&choice);
}
}while (choice !='0');
return 0;
}
我非常感谢你的帮助。我是编程新手,如果这个问题很愚蠢,请原谅我。
最佳答案
我建议您使用以下代码:
#include <stdio.h>
#include <string.h>
int main (void)
{
char choice[201];
do
{
scanf("%200s", choice);
if (strcmp(choice, "1") == 0 ||
strcmp(choice, "2") == 0 ||
strcmp(choice, "3") == 0)
printf("error");
} while (strcmp(choice, "0") != 0);
return 0;
}
%s
等待char *
参数,您的&choice
是对的,但是scanf将在指向的地址写入一个完整的字符串,该字符串可以(将)包含多个字符。通过给出一个char变量的地址,您只为它提供了一个char的空间。不能用比较运算符比较字符串,例如,必须使用
strcmp
函数,如果两个参数不匹配,则返回0,否则返回非零。如果我正确理解了您的意图,就不需要两个嵌套的while循环。这两个
scanf
调用也不需要。scanf格式字符串中的
200
限制将写入提供地址的数组中的字符数。此数组的大小小于C C>以解释额外的“\0”字节,终止C字符串。
要正确编写这段代码,应该测试scanf的返回,检查是否成功解析了某些内容。
请参阅scanf的手册页,了解如何检查解析是否成功进行。