【问题标题】:How to print output on the same line as input?如何在与输入相同的行上打印输出?
【发布时间】:2021-07-10 09:24:22
【问题描述】:

如何在输入的同一行打印?

这是我的代码

    #include <stdio.h>
    int main() {
       int number;
       printf("Enter number: ");
       scanf("%d", &number);
       printf("You entered: %d",number);
       return 0;
    }

发生了什么:

     Enter number: 23
     You entered 23

我想要实现的目标:

     Enter number: 23 , You entered 23

【问题讨论】:

  • scanf() 正在等待您在读入整个字符串之前点击&lt;enter&gt; key。恐怕您将不得不使用 getchar 为例。
  • 制作一个包含"23"的2字节文件“数据”。使用重定向输入 prog &lt; data 调用您的代码。
  • @Damien getchar() 在处理输入之前也会等待“Enter”;你的意思是getch()
  • @AdrianMole 有效。记性不好。
  • 无需将文本作为图像发布。您刚刚发布了 3 行文字的 2 张图片。 100 kB 可以在 130 B 内完成。

标签: c input output


【解决方案1】:

使用“标准”输入例程(在&lt;stdio.h&gt; 中定义的那些例程,例如scanfgetchar)将等到您按下“Enter”键后再处理您的输入——而“Enter”将是回显为换行符(无法避免)。

但是你可以使用getch()函数(定义在&lt;conio.h&gt;);这将不会回显您输入的键/字符,因此,当您按“Enter”时,控制台上不会“反映”换行符。但是,您必须手动回显您键入的任何其他字符,并将它们保存到输入缓冲区;然后,您可以使用 sscanf 函数从该缓冲区中读取整数。

这是一个简短的示例,可以满足您的要求:

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
    char buffer[256] = ""; // Space for our input string
    printf("Enter number: ");
    int in;
    while ((in = getch()) != '\r') { // Read until we see the "Enter" key ...
        char out = (char)(in);
        printf("%c", out); // We need to manually "echo" the input character...
        buffer[strlen(buffer)] = out; // ... and add that to our input buffer
        if (strlen(buffer) == 255) break; // Prevent buffer overflow!
    }
    int number;
    sscanf(buffer, "%d", &number); // Read number from buffer ...
    printf(" , You entered: %d", number); // ... and print it (on the same line)
    return 0;
}

注意:您可以(应该)在此代码中添加更多错误检查(例如检查scanf 的返回值以确保给出有效整数);但是,我展示的内容“模拟”了您的原始代码,但没有回显换行符。

【讨论】:

    猜你喜欢
    • 2013-05-31
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多