这是我的代码。用户输入一个字符串,如果输入是 1,2 或 * 则显示错误。问题是所有第一位数字为 1,2 和 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
调用。
%200s
scanf 格式字符串中的200
,限制了将写入您提供地址的数组中的字符数。
此数组的大小为 201
以说明额外的“\0”字节,终止 C 字符串。
要正确编写这段代码,应该测试 scanf 的返回值,以检查是否已成功解析某些内容。 请参阅 scanf 的手册页以了解如何检查解析是否成功。
关于c - 虽然有多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44333129/