【问题标题】:C how to get input correctlyC 如何正确获取输入
【发布时间】:2020-09-17 06:40:15
【问题描述】:

我试图从用户那里得到一个句子和一封信,但由于某种原因它没有收到信 scanfgetcahr() 不同;

void main(){

    char str[100];
    char letter;
    printf("Enter a line: \n");
    scanf("%s", str);
    printf("Enter a letter: ");
    scanf("%c", &letter);
    printf("%c", letter);
}

尝试将NULL放在字母中没有区别

【问题讨论】:

  • "正确输入" --> 使用fgets() 而不是scanf()

标签: c input scanf getchar


【解决方案1】:

scanf("%s" 读取一个空格分隔的单词,NOT 一行。因此它会跳过输入中的任何初始空白,然后读取非空白字符直到(不包括)下一个空白字符。由于换行符是空格,它会结束这个过程,但任何其他空格也会结束它。

scanf("%c" 读取单个字符而不跳过任何空格(与 getchar 相同)。它不跳过空格这一事实意味着,如果您在 scanf("%s" 之后直接使用它,您将得到第一个 scanf 结尾的任何空格字符。

如果要读取一行,请使用fgetsgetline

【讨论】:

    【解决方案2】:

    //它似乎行为不端取决于编译器。我使用 CLion 运行下面的代码,并在 scanf 的百分比符号前添加了空格。

    // 希望对你有帮助:)

    #include <stdio.h>
    
    int main() {
        char name[100];
        char a;
    
        printf("enter anything \n");
        scanf(" %s %c", &name,&a);
        printf("%s space   %c",name,a);
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      一个可能的原因可能是当你得到字符串时按回车后得到的新行。所以我们需要告诉 scanf 避免换行符。试试这个在 %c 前面放一个空格这会告诉你scanf 忽略换行符。 scanf("%c",&letter)

      【讨论】:

      • 它的工作,但如果我把一个带空格的字符串它不是
      • 所以现在它正在占用空间 char 。尝试 scanf("%s%*c") 这将忽略字符串后面的字符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2017-10-11
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多