C语言的printf函数问题

如果我用

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();
}

供你参考

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/265928
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言中的printf使用
  • 同时,你还可以查看手册:c语言-printf() 中的内容
  • 除此之外, 这篇博客: [C语言]关于printf输出的奇怪事:printf(“%d %d %d %d %d\n“, ++i, --i, i++,i--, i),printf(“%c%c\n“,*p++,*p++)的结果分析中的 演示过程 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    首先,我们要明确,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

    听到这里,不知道
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^