C 在双精度模式中从右侧(最右侧)切换第2位和第4位

C 在双精度模式中从右侧(最右侧)切换第2位和第4位,c,C,我的问题和这里的问题差不多: 不同的是,我想从右边切换第二位和第四位,而不是像另一个问题中那样切换左边。所以在我的例子中最右边的数字是1。 示例:283926.67变为282936.67。 如何编写此代码 #include <stdio.h> #include <stdlib.h> int main() { double number; printf("Give a number: "); scanf("%lf", &number

我的问题和这里的问题差不多:

不同的是,我想从右边切换第二位和第四位,而不是像另一个问题中那样切换左边。所以在我的例子中最右边的数字是1。 示例:283926.67变为282936.67。 如何编写此代码

#include <stdio.h>
#include <stdlib.h>


int main() {


    double number;

    printf("Give a number: ");
    scanf("%lf", &number);

    //printf("%.4f", number);

    char arr[sizeof(number)];
    snprintf(arr, sizeof(number) + 1, "%f", number);

    char ex = arr[1];
    arr[1] = arr[3];
    arr[3] = ex;

    number = atof(arr);
    printf("%.4f\n", number);


    return 0;
}
#包括
#包括
int main(){
双数;
printf(“给出一个数字:”);
scanf(“%lf”和编号);
//printf(“%.4f”,数字);
字符arr[sizeof(number)];
snprintf(arr,sizeof(number)+1,“%f”,number);
char ex=arr[1];
arr[1]=arr[3];
arr[3]=ex;
编号=atof(arr);
printf(“%.4f\n”,数字);
返回0;
}

你只需做与你给出的链接完全相同的事情:

int main() {
    double A = 282936.67;

    char str[50];
    sprintf(str, "%f", A);

    int dot = -1, i = 0;
    //Finds the dot position
    while (i != 50) {
        if (str[i] == '.') {
            dot = i;
            break;
        }
        i++;
    }

    if (dot >= 4) {
        char tmp = str[dot - 2];//Search from the dot position
        str[dot - 2] = str[dot - 4];
        str[dot - 4] = tmp;
    }
    //Convert your string to a float
    A = atof(str);
    printf("%.2f", A);

    while (1);
    return 0;
}

可能是@TheoPnv的副本你看我写的怎么样?欢迎来到Stack Overflow!请展示您迄今为止的研究/调试工作。请先阅读第页。@SouravGhosh添加了我的代码:)@Sullivan将问题标记为重复问题是正常的,即使你提到了它。尽量不要对做节制的人说严厉的话:)谢谢你的回答,if语句中到底发生了什么?哪一个?第一个检查是否在某处找到了点,第二个检查点是否位于足够远的位置,以获取
dot-4
字符,否则在检查
str[dot-4]时会出现异常
哦,我明白了,为什么int-dot的值是-1?
dot
可以用4以下的任何值初始化,而不改变实际程序中的任何内容,我只是把
-1
放进去,以清楚地表明如果数组中没有点,它的结果不会指向错误的值