c - 打印一个整数,中间有空格
问题描述
我正在编写一个代码来重写从用户那里获取的整数,其中之间有空格。例如 456 将给出 4 5 6。这是我的代码,但它用空格反向打印整数。例如它的打印 6 5 4 而不是 4 5 6。我哪里错了?
#include<stdio.h>
int spc(int x);
int main() {
int n1;
printf("Enter Number:");
scanf("%d", &n1);
spc(n1);
}
int spc(int x)
{
int rem,quo;
do {
rem = x % 10;
printf(" %d",rem);
quo = x / 10;
x = quo;
} while(x % 10 > 0);
}
解决方案
你不仅要按相反的顺序写数字,还要写你的结束条件
而(x % 10 > 0);
错误并在到达“0”时停止循环
此外,该功能必须是void
因为您从不返回值,而且您不必这样做。
始终检查scanf是否能够获得预期值
可 :
#include<stdio.h>
void spc(int x);
int main() {
int n1;
printf("Enter Number:");
if ((scanf("%d", &n1) == 1) && (n1 >= 0)) {
spc(n1);
putchar('\n');
}
}
void spc(int x)
{
if (x >= 10)
spc(x/10);
putchar((x % 10) + '0');
putchar(' ');
}
如果您还想管理仍然只使用int的负数:
#include<stdio.h>
void spc(int x);
int main() {
int n1;
printf("Enter Number:");
if (scanf("%d", &n1) != 1)
puts("invalid number");
else {
spc(n1);
putchar('\n');
}
}
void spc(int x)
{
if (x/10 != 0)
spc(x/10);
else if (x < 0)
fputs("- ", stdout);
putchar(((x < 0) ? -(x % 10) : x % 10) + '0');
putchar(' ');
}
警告不要这样做-x
,因为最负的int没有等效的正int。
bruno@bruno-XPS-8300:/tmp$ gcc f.c
bruno@bruno-XPS-8300:/tmp$ ./a.out
Enter Number:aze
invalid number
bruno@bruno-XPS-8300:/tmp$ ./a.out
Enter Number:0
0
bruno@bruno-XPS-8300:/tmp$ ./a.out
Enter Number:123
1 2 3
bruno@bruno-XPS-8300:/tmp$ ./a.out
Enter Number:-123
- 1 2 3
bruno@bruno-XPS-8300:/tmp$
如果您有数字的外部表示,我们可以想象不管理数字而只是按顺序打印字符串,在每个字符后添加一个空格,但这可能是作弊
请注意,在我的定义中,我不使用printf
像这样的格式,%d
因为它对数字没用,而且我不想使用printf,因为考虑到这个问题,这是为了作弊
推荐阅读
- symfony - 用于夹具生成的自定义代理实体
- xcode - Xcode 界面生成器显示“无选择”
- powershell - 子生成的powershell脚本完成后如何继续powershell脚本?
- python - 我正在寻找在 python 中生成列表列表的组合
- python - Django Admin自定义列表过滤不同的模型
- java - 如何解决 - 如果应用程序未打开一段时间,Onesignal 推送通知不会发送到 Android 设备?
- x11 - 为 X2Go 客户端设置一致的显示编号
- c++ - 为什么 std::basic_istream::ignore() 提取的字符比指定的多?
- ruby-on-rails - 如何启动rails服务器
- c++ - 无法读取 .jpg 二进制数据,缓冲区只有 4 个字节的数据