这是我的代码。用户输入一个字符串,如果输入是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的手册页,了解如何检查解析是否成功进行。

10-02 04:21
查看更多