c - Char变量如何在C中工作

标签 c

我想要完成的是提示用户他们想再次运行该程序的问题。他们输入 y 或 n。如果是,它会重新运行程序。如果否,它会停止程序。除了这两个之外的任何其他内容都会提示错误并再次提出问题。我习惯了字符串并不复杂的 C#,但在 C 中,我猜从技术上讲没有字符串,所以我们必须使用 char 数组或 char 指针。我都试过了,没有一个能按我想要的方式工作,但我可能是问题所在。这就是我所拥有的。

char answer[1] = "a";

while (strcmp(answer, "y") != 0 || strcmp(answer, "n") != 0)
{
    printf ("\n\nWould you like to run the program again? Type y or n. Then, hit Enter.");
    scanf ("%c", answer);

    if (strcmp(answer, "y") == 0)
    {
        main();
    }
    else if (strcmp(answer, "n") == 0)
    {
        continue;
    }
    else 
    {
        printf ("\nERROR: Invalid input was provided. Your answer must be either y or n. Hit Enter to continue.");
        F = getchar();
        while ((getchar()) != F && EOF != '\n');
    }
}

我还有其他与此类似的 while 循环,它们按预期工作,但使用的是 float 。所以我假设问题是我在这里使用 char 。现在发生的情况是它甚至不提示用户提出问题。它只是提出问题,然后立即显示错误。我确定此代码还有其他问题,但由于我无法获得工作提示,所以我无法测试其余部分。

最佳答案

我建议使用轻量级的 getchar() 而不是重量级的 scanf

#include <stdio.h>

int c;  /* Note getchar returns int because it must handle EOF as well. */   

for (;;) {
    printf ("Enter y or n\n");
    c = getchar();
    switch (c) {
    case 'y': ...
        break;
    case 'n': ...
        break:
    case EOF:
        exit(0);
    }
}

关于c - Char变量如何在C中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21660948/

相关文章:

c - 使用 C 语言中具有 .crt 文件的 SSL 对 HTPPS 进行身份验证

c - 警告 TokenList 类型转换

c - 如何使用 arm gdb 忽略中断

c - 指向 "typedef struct"声明的指针

C 链表访问问题

c - 如何找到二维数组中给定范围的最大和?

c++ - 共享内存包含指针

c - EOF 上的意外 fgets 行为

c - while 循环内的 if else 语句。(我试图在链表中的给定位置插入一个节点。)

c - 使用 scanf 输入 char 并将其保存在 int 中会导致未定义的行为吗?