使用for循环在数字中插入逗号不起作用
Posted
技术标签:
【中文标题】使用for循环在数字中插入逗号不起作用【英文标题】:Inserting commas in numbers using for loop not working 【发布时间】:2021-11-20 09:32:39 【问题描述】:我尝试制作一个程序,它将逗号放在数字之间的某个位置。我的解释可能很模糊,但我只是想把12345678.23
变成12,345,678.23
。我希望这能澄清我的解释。这是我的代码。
#include<stdio.h>
#include<string.h>
void main()
char m[20]="12345678.23";
int j=11, a, t=1, r=4, s;
for(a=0; a=11; a++)
if(strlen(m)==j)
printf("%c", m[a]);
if(a==t)
printf(",");
if(a==r)
printf(",");
这个程序不起作用,我不知道为什么。我希望你们能帮助我。非常感谢!
【问题讨论】:
首先:正确格式化您的代码,例如您的学习材料中的示例。然后给你的变量起有意义的名字。这将使您的代码可读。另请阅读:ericlippert.com/2014/03/05/how-to-debug-small-programs 无关,只是深思:如果char m[20] = "foobar"; /*not a number*/
怎么办?如果char m[20] = "-666.66"; /*hanging comma?*/
怎么办?如果char m[20] = "1000042"; /*no period*/
【参考方案1】:
#include <stdio.h>
#include <string.h>
int main(void) // Use the proper signature
char m[] = "123"; // Do not hardcode the size
char *p; // A pointer to traverse the string
int mod; // Useful to know when to insert a comma
p = strchr(m, '.'); // Position of the decimal separator
if (p == NULL)
p = strchr(m, '\0'); // Don't have decimal separator
mod = (p - m) % 3; // Comma must be placed on each mod count
p = m; // Rewind the pointer
while (*p != '\0') // While the character is not NUL
if (*p == '.') // Decimal separator reached
mod = 3; // Avoid divisibility
// If position divisbile by 3 but not the first pos
if ((p != m) && (mod != 3) && (((p - m) % 3) == mod))
putchar(',');
putchar(*p);
p++; // Next character
putchar('\n');
return 0;
输出:
12,345,678.23
【讨论】:
【参考方案2】:我实际上是偶然得到的。这是新代码
#include<stdio.h>
#include<string.h>
void main()
char m[12];
gets(m);
int j, a, t=1, r=4;
for(j=11; j>=0; j--)
for(a=0; a<=j; a++)
if(strlen(m)==j)
printf("%c", m[a]);
if(a==t)
printf(",");
if(a==r)
printf(",");
t--;
r--;
输入的末尾至少要有 2 位小数,例如 1234.34
或 12345678.87
。
【讨论】:
【参考方案3】:请您尝试以下方法:
#include<stdio.h>
#include<string.h>
int main()
char m[]="12345678.23";
int len = strlen(m); // length of string "m"
char *p = strchr(m, '.'); // pointer to the decimal point
int dp; // length of the decimal position (including the dot)
if (p == NULL) dp = 0; // decimal point does not appear
else dp = len - (int)(p - m); // length of the decimal position
for (int i = 0; i < len; i++) // loop over the characters of "m"
putchar(m[i]); // print the character at first
if ((len - dp - i - 1) % 3 == 0 && i < len - dp - 1) putchar(',');
// print the comma every three digits from the 1's place backward
putchar('\n');
return 0;
它可以带或不带小数位。此外,逗号的位置是自动计算的。您不必显式分配它们。
【讨论】:
以上是关于使用for循环在数字中插入逗号不起作用的主要内容,如果未能解决你的问题,请参考以下文章