【问题标题】:Make fgets save characters to a variable in C使 fgets 将字符保存到 C 中的变量中
【发布时间】:2015-01-19 07:09:14
【问题描述】:

我有这个小程序:

char buffer[10] = "0"
while (buffer == "0"){
 fgets(buffer, sizeof(buffer), stdin);

if(buffer == "1\n") do this
if(buffer == "2\n") do that
}

但是,当我按 1 或 2(或其他任何东西)时,什么也没有发生。 我错过了什么?

【问题讨论】:

  • 使用strcmp比较字符串。
  • 您不能使用== 在 C 中比较字符串 - 请改用 strcmp。

标签: c if-statement while-loop conditional-statements fgets


【解决方案1】:

其他人已经告诉您,您不能将字符串与== 进行比较。在您想要编写菜单的情况下,您可以先使用sscanfatoi 将缓冲区转换为数字。

下面是这样一个菜单的简单实现:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    char buffer[10];
    int done = 0;

    while (!done) {
        int option = 0;

        puts("1. Do this");
        puts("2. Do that");
        puts("3. Quit\n");

        if (fgets(buffer, sizeof(buffer), stdin) == NULL) break;
        if (sscanf(buffer, "%d", &option) < 1) option = 0;

        switch (option) {
        case 1:
            puts("Done this.\n");
            break;

        case 2:
            puts("Done that.\n");
            break;

        case 3:
            done = 1;
            break;

        default:
            puts("Please enter one of 1, 2, 3\n");
        }
    }

    puts("Bye!");
    return 0;
}

【讨论】:

    【解决方案2】:

    改成

    char buffer[10] = "0"
    while (fgets(buffer, sizeof(buffer), stdin){
        if(strcmp(buffer, "1\n")==0)
            ;//do this
        if(strcmp(buffer, "2\n")==0)
            ;//do that
    }
    

    【讨论】:

      【解决方案3】:

      while (buffer == "0")

      在这里,我想,你是期待的

      while(strcmp(buffer,"0")==0).// 你可以改变条件

      【讨论】:

        猜你喜欢
        • 2014-07-17
        • 1970-01-01
        • 1970-01-01
        • 2018-06-15
        • 1970-01-01
        • 1970-01-01
        • 2019-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多