如何使下一个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打印?
你在第一线看到的是输入用户给到控制台,而第二行是实际的printf(这实际上不打印任何换行符)。
当用户输入4/2
他按下进入并是什么,被打印到控制台上。
如果你不希望这只是receciving他们以后的事情,用getchar()
功能三次二送三个大字,并打印。尽管您必须添加一些复杂的代码来识别第一个数字的结尾,第一个可操作字符+-*/
和第二个数字的结尾(您可以使用空格字符)。这将最终打印您的输入,如4/2 =2
。
或在上述意见中提到,
你可以真正做的是一些容易:打印输入与像的输出一起:printf("%d%c%d=%d",,a,c,b,a+b);
但这种做法将在输出真正实现,以及原始输入到控制台。
*“你会虽然要忍受一点点复杂的代码,以确定第一号结束,第一种运行字符+ - * /,第二个数字的结局*”将如何你建议在你的方法中确定“第二个数字的结尾”? – MFisherKDX
哦,忘了提一下,空格字符可能会有所帮助。将在答案中加上这一点。 –
在大多数系统中,'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;
}
用户类型的换行;你不能阻止这种情况的发生,因此你的程序的输出发生在下一行。不过,您可以在单行上回显所有输入和结果。 –
*“您可以在单行上回显所有输入以及结果。”*您能解释一下您的意思吗? –
'的printf( “%+%d =%d \ n” 个,A,B,A + B)' – Barmar