c - 虽然有多个条件

标签 c conditional-statements

这是我的代码。用户输入一个字符串,如果输入是 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/

相关文章:

c - 为什么 syslog.h 会跳过我的 C 程序中的日志消息?

Python if 语句不起作用?

excel - 将列中的范围与另一列中的条件相加

Python 函数可选参数 - 可以添加为条件吗?

c++ - std::cout 不喜欢条件 if 中的 std::endl 和字符串

c - 具有递归功能的段错误

c++ - 'uint32_t' 标识符未找到错误

javascript - 检查多个条件值不输出else语句

c - 为什么 opendir 会出现 SIGABRT 错误

c - 为什么在这个例子中 strptime() 没有正确设置 tm_wday?