如何使下一个printf()在同一行上打印而不在下面?

问题描述:

我最近开始学习C,我决定做一个计算器程序,是很容易的用户使用:如何使下一个printf()在同一行上打印而不在下面?

#include"stdio.h" 

int main() 
{ 
    int a,b; 
    char c; 
    scanf("%d%c%d",&a,&c,&b); 
    switch(c) 
    { 
     case '+': 
     printf("=%d",a+b); 
     break; 

     case '-': 
     printf("=%d",a-b); 
     break; 

     case '*': 
     printf("=%d",a*b); 
     break; 

     case '/': 
     printf("=%d",a/b); 
     break; 

     case '%': 
     printf("=%d",a%b); 
     break; 

     default: 
     printf("\nWhat the heck is %c supposed to mean??",c); 
     break; 
    } 
    return 0; 
} 

然而,当我执行它,我得到这个问题。输出语句得到如下一行打印,而不是继续在同一行,即使我没有在printf()命令使用\n

4/2 
=2 

我该如何解决这个问题,并在同一行上打印= 2打印?

+1

用户类型的换行;你不能阻止这种情况的发生,因此你的程序的输出发生在下一行。不过,您可以在单行上回显所有输入和结果。 –

+0

*“您可以在单行上回显所有输入以及结果。”*您能解释一下您的意思吗? –

+0

'的printf( “%+%d =%d \ n” 个,A,B,A + B)' – Barmar

你在第一线看到的是输入用户给到控制台,而第二行是实际的printf(这实际上不打印任何换行符)。

当用户输入4/2他按下进入并是什么,被打印到控制台上。

如果你不希望这只是receciving他们以后的事情,用getchar()功能三次二送三个大字,并打印。尽管您必须添加一些复杂的代码来识别第一个数字的结尾,第一个可操作字符+-*/和第二个数字的结尾(您可以使用空格字符)。这将最终打印您的输入,如4/2 =2

或在上述意见中提到,

你可以真正做的是一些容易:打印输入与像的输出一起:printf("%d%c%d=%d",,a,c,b,a+b);但这种做法将在输出真正实现,以及原始输入到控制台。

+0

*“你会虽然要忍受一点点复杂的代码,以确定第一号结束,第一种运行字符+ - * /,第二个数字的结局*”将如何你建议在你的方法中确定“第二个数字的结尾”? – MFisherKDX

+0

哦,忘了提一下,空格字符可能会有所帮助。将在答案中加上这一点。 –

+3

在大多数系统中,'getchar()'在用户按下返回键之前不会返回任何东西,直到损坏完成。您可以使用特定于平台的“读取单个字符而不等待换行”功能,这可能足以完成这项工作。但是您必须知道您正在使用哪个平台来了解要使用哪个功能。 –

使用的termios:

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <unistd.h> 
#include <termios.h> 


int main() 
{ 
    int a,b, i, j; 
    char c, str[10]; 
    struct termios term, term_orig; 
    if(tcgetattr(STDIN_FILENO, &term_orig)) { 
     printf("tcgetattr failed\n"); 
     return -1; 
    } 
    term = term_orig; 
    term.c_lflag &= ~ICANON; 
    term.c_lflag &= ~ECHO; 
    if (tcsetattr(STDIN_FILENO, TCSANOW, &term)) { 
      printf("tcsetattr failed\n"); 
      return (-1); 
    } 
    for (i =0; i < 3; i++)  
    { 
     switch (i) 
     { 
     case 0: 
      for(j = 0;; j++) 
      { 
       str[j] = getchar(); 
       if (isdigit(str[j])) 
        putchar(str[j]); 
       else 
        break;  
      } 
      str[j] =0; 
      a = atoi(str); 
      break; 
     case 1: 
     do { 
     c = fgetc(stdin); 
     } while (c == ' '); 
      putchar(c); 
     break; 

     case 2: 
     j = 0; 
     do { 
      str[j] = getchar(); 
      putchar(str[j]); 
     } while (str[j] == ' '); 
     for(j = 0;; j++) 
     { 
     str[j] = getchar(); 
     if (isdigit(str[j])) 
       putchar(str[j]); 
     else 
      break;  
     } 
     str[j] =0; 
     b = atoi(str); 
     break; 
    } 
} 
switch(c)//....... 


if (tcsetattr(STDIN_FILENO, TCSANOW, &term_orig)) { 
    printf("tcsetattr failed\n"); 
    return -1; 
    }