如果我用
printf("%d ", m);
输出了一个m和一个空格之后,我如何再用程序删除末尾的空格?
既然都已经输出打印再控制台上了,那怎么还可以删除呢?
输出前判断一下,不让空格输出就可以了!
标准控制台不提供严格意义上的删除功能,不过你可以用\b字符回退光标。
printf("123\b");输出123
printf("1234\b3");输出1233
只能做到类似的效果。
1楼正解,输出前搞个去空格的函数处理下
想在输出后再做处理其实也可以,光标是可以控制的,再插入空字符就能删除了。
下面是一个用方向键控制的,也可以gotoXY(1,1) 再putchar(' ');
//C语言实现控制台中光标随意移动
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <iostream>
HANDLE hout;
//获得输入
char getInput()
{
std::cout << "sdfsdfasdfsdfsdfsdfsdfsdfsdf";
int ch; //输入字符串
COORD coord; //屏幕上的坐标
CONSOLE_SCREEN_BUFFER_INFO csbi; //控制台屏幕缓冲区信息
coord.X = 10;
coord.Y = 10;
ch = _getch();
//0x0d表示回车,0XE0表示上下左右等键的键码
while (ch == 0xE0 || ch == 0x0d)
{
GetConsoleScreenBufferInfo(hout, &csbi);
coord.X = csbi.dwCursorPosition.X; //得到坐标X的值
coord.Y = csbi.dwCursorPosition.Y; //得到坐标Y的值
//如果是回车
if (ch == 0x0d)
{
coord.X = 0;
coord.Y++;
SetConsoleCursorPosition(hout, coord);
break;
}
ch = _getch();
//上
if (ch == 0x48)
{
if (coord.Y != 0)coord.Y--;
}
//下
else if (ch == 0x50)
{
coord.Y++;
}
//左
else if (ch == 0x4b)
{
if (coord.X != 0) {
coord.X--;
putchar(' ');
}
}
//右
else if (ch == 0x4d)
{
if (coord.X != 79)coord.X++;
else
{
coord.X = 0;
coord.Y++;
}
}
SetConsoleCursorPosition(hout, coord);
ch = _getch();
}
return ch;
}
int main()
{
char ch;
hout = GetStdHandle(STD_OUTPUT_HANDLE);
//从键盘获取输入,如果是方向键则执行方向功能,如果是回车键则换行,如果是字符则输出
while (1)
{
ch = getInput();
printf("%c", ch);
}
getchar();
}
供你参考
不知道你这个问题是否已经解决, 如果还没有解决的话:首先,我们要明确,printf是一个stdio.h库中的一个函数,函数的参数是要存放在栈当中的。
即对于这一句 printf("%d %d %d %d %d\n", ++i, --i, i++, i--, i);
而言,可以使用下面进行表示
2.
我们从参数栈中取出表达式进行计算,计算结果也要放到一个栈(我们称其为结果栈)当中。
对于后置 ++ 或者 - - 而言,我们直接把结果放到结果栈中
对于前置 ++ 或者 - - 而言,我们把一个指向 i 变量的指针放入结果栈当中
对于一个变量而言,我们把一个指向 i 变量的指针放入结果栈当中
最终 i 的值为8;
我们使用 *(&i) 表示指向i变量的指针
从结果栈中取出结果,进行打印,上面的*(&i)表示最终 i 变量的值。
最终打印结果为 8 8 7 8 8
听到这里,不知道