【问题标题】:C Programming: How to make program end when user inputs a newlineC编程:当用户输入换行符时如何使程序结束
【发布时间】:2020-02-15 02:48:12
【问题描述】:

我正在构建一个基本的 C 程序,它不断地询问用户输入字符串并打印出输入的输入。当用户输入空行时,程序应该退出。然而,在我下面的程序中,即使我有一个条件来检查用户是否输入了一个空行,程序仍然会继续运行,直到用户输入一个输入。以下是我的代码:

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

int main()
{
    char userString[100];
    while (1 == 1) {
        scanf("%s", userString);
        printf("USER ENTERED %s\n", userString);
        if (userString[0] == '\n') {
            exit(0);
        }
    }
}

【问题讨论】:

  • 您可以添加printf("first char is %d\n", (int)(userString[0])),无需在此处发布即可找到您问题的答案。这是一种非常基本的调试技术。你应该练习一些......
  • 您也可以添加printf("newline char is %d\n", (int)'\n') 以找出差异。

标签: c string input


【解决方案1】:

scanf 函数通常读取 空格分隔“令牌”(单词、数字等)。

几乎所有格式说明符(包括%s)都会跳过前导空格(所有空格,例如普通空格、制表符和换行符)。唯一不跳过空格的两种格式是%[ 格式和%c 格式,第一种可能对您有用,但我建议不要这样做。

要阅读,我推荐使用fgets 函数。如果缓冲区中唯一的字符是换行符,那么你有一个空行。

【讨论】:

    【解决方案2】:
        scanf("%s", userString);        scanf("%s", userString);
    

    scanf%s 将读取输入流,直到它遇到任何空白。因此,换行符不会包含在userString 中。

    请改用fgets

       fgets(userString, sizeof userString, stdin);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-23
      • 2019-06-30
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      相关资源
      最近更新 更多