C 程序在接受 scanf() 输入之前终止

标签 c input scanf

虽然我知道这个程序的布局很奇怪,但我认为我的程序在处理 scanf() 行时遇到了问题。由于某种原因,在输入 metricConversion() 函数后。 scanf() 行已打印,但程序在给出输入之前退出并终止...我不明白为什么会发生这种情况...

#include <stdio.h>

char inputtedChar;
int inputtedInt;

int metricConversion(){
    scanf("Press K for conversion from Kelvin to Celsius %c", &inputtedChar);

    if(inputtedChar == 'K'){
        //do Something
    } else { return 0; }
}

int main() {
    printf("Press 0 to enter conversion function!");
    scanf("%d", &inputtedInt);

    if (inputtedInt == 0) {
        metricConversion();
    }
}

更重要的是,有人可以解释为什么 scanf() 会这样工作吗?最好的替代方案是什么,这样我就不会再遇到这个问题了?

最佳答案

更改 scanf("Press K for conversion from Kelvin to Celsius %c", &inputtedChar);到:

printf("Press K for conversion from Kelvin to Celsius ");
fflush(stdout);
scanf(" %c", &inputtedChar);
/*     ^                    */
/*   this space             */

有两个问题。使用 printf提示。你需要在scanf中使用空间忽略 %c 之前的空格, %[…] (扫描集)或 %n转换。使用 fflush将确保在等待输入之前将提示打印在屏幕上。

建议使用 fflush之前scanfmain功能也一样,除非你想用 '\n' 终止打印的字符串.


What does scanf("Press K for conversion from Kelvin to Celsius %c", &inputtedChar); mean?

这不会打印任何内容。这意味着程序需要准确的输入 Press K for conversion from Kelvin to Celsius <SOME_CHAR>并阅读 <SOME_CHAR>在输入。有关更多详细信息,您需要了解正则表达式。

关于C 程序在接受 scanf() 输入之前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58179073/

相关文章:

c - 在这个程序中数组是如何存储在内存中的?

html - 我怎样才能将下拉列表的宽度更改为他的实际输入大小

c++ - 为什么这里 getline 比 scanf 快?

c++ - 为什么我应该在 scanf() 系列成员中加入一个长度修饰符作为参数?有什么好处?带有长度修饰符的 scanf 有什么作用?

C:fscanf 删除整数变量值?

c - 我有一个链表,我想删除重复的值

使用 strdup 在 C 中复制链表

java - NullPointerException 尝试从 JNI 填充数组

html - 如何使用输入日期时间?

javascript - 为什么这个 jQuery 输入值检查器不起作用?