标签: conversion-specifier

使用c中的scanf读取double值

我尝试使用C中的scanf()读入2个值,但系统写入内存的值不等于我输入的值.这是代码:

double a,b;
printf("--------\n"); //seperate lines
scanf("%ld",&a);
printf("--------\n"); 
scanf("%ld",&b);
printf("%d %d",a,b);
Run Code Online (Sandbox Code Playgroud)

如果我输入1和2,CMD返回正确的,但是b = -858993460这是我已经尝试的:使用float或int而不是double,使用scanf_s,使用scanf("%d或%f用于%i或%li或%lf或%e或%g),使用fflush(stdin)清除键盘缓冲区,首先读入b,尝试所有可能的组合.我发现32位操作系统上的双倍长度存在问题,这样你就不得不使用scanf("%lf",&f)读取一个double.无论我做什么,第二个值总是错误的.

我在Windows 7 32位操作系统上使用MS VS express 2012 for Desktop.

c scanf conversion-specifier

41
推荐指数
2
解决办法
24万
查看次数

什么是"无效的转换规范"?

根据C11章节§7.21.6.1,P9

如果转换规范无效,则行为未定义.282)如果任何参数不是相应转换规范的正确类型,则行为未定义.

到时候,我的理解是,为

  char str [] = "Sourav";
Run Code Online (Sandbox Code Playgroud)
  • 一个声明就像printf("%S", str);属于第一句话,没有CS作为%S(UPPERCASE)
  • 如陈述printf("%d", str);属于第二句(CS和参数类型不匹配,但是%d不是 "无效" CS,反正)

直到最近的评论帖子通知为止.

我的理解错了吗?第二个语句是否可以归类为"无效"(PS-而非"错误")转换说明符?


更新:删除答案和评论主题,这里是 <10K用户的快照.

c printf language-lawyer conversion-specifier

4
推荐指数
1
解决办法
1144
查看次数

用%c打印577如何输出“A”?

#include<stdio.h>
int main()
{
  int i = 577;
  printf("%c",i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译后,它给出输出“A”。谁能解释一下我是如何得到这个的?

c printf integer char conversion-specifier

4
推荐指数
2
解决办法
193
查看次数

如何使用 printf 将格式说明符与字符分开

表达这个问题的另一种方式可能是“如何在 printf 中结束格式说明符”

如果我想100us使用以下代码以这种格式打印微秒......

long microseconds = 100L;
printf("%lus", microseconds);
Run Code Online (Sandbox Code Playgroud)

只打印,100s因为 theu与 the 组合%l,并且它将格式说明符解释为 anunsigned long而不是 along

c printf format-specifiers conversion-specifier length-modifiers

4
推荐指数
1
解决办法
236
查看次数

%PRId和%d格式字符有什么区别?

请考虑以下代码:

#include <stdio.h>
#include <inttypes.h>

void main(void)
{
    int32_t a = 44;

    fprintf(stdout, "%d\n", a);
    fprintf(stdout, "%"PRId32"\n", a);
}
Run Code Online (Sandbox Code Playgroud)

什么时候使用%d更好,"%"PRId32什么时候使用会更好?这两种格式字符有何不同?这是否与int32_t您的硬件/机器上的typedeffed有关?

c printf conversion-specifier length-modifiers

3
推荐指数
1
解决办法
108
查看次数

字符串格式(C%* s)

我在C的某处看到了一部分代码

char name[51];
int group = 0;
scanf("%*s %50s %*s %d", name, &group);
printf("%s / %d\n", name, group);
Run Code Online (Sandbox Code Playgroud)

如果我们介绍

“名称:史密斯集团:7”

它等待着我们引入另一个价值。真奇怪。到底发生了什么,%*s %50s %*s意味着什么。我%*s以前看过,但从未看过字符串。

c string printf input conversion-specifier

3
推荐指数
1
解决办法
41
查看次数

malloc的默认值是单个char P的大小吗?

char *ptr = malloc(sizeof(char));
printf("\nValue of ptr: %d\n",ptr);
printf("\nValue of address of ptr: %x\n",&ptr);
printf("\nValue of pointed by ptr: %c\n",*ptr);
printf("\nValue of address pointed by ptr: %x\n",&(*ptr));
*ptr='u';
 printf("\nValue of pointed by ptr: %c\n",*ptr);
printf("\nValue of address pointed by ptr: %x\n",&(*ptr));
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,收到以下输出:

Value of ptr: 1046113600
Value of address of ptr: a2fffa78
Value of pointed by ptr: P
Value of address pointed by ptr: 3e5a6d40
Value of pointed by ptr: u
Value of address pointed by ptr: 3e5a6d40
Run Code Online (Sandbox Code Playgroud)

这是否意味着具有单个字符大小的malloc的默认值为P?

尝试使用 …

c malloc pointers char conversion-specifier

3
推荐指数
2
解决办法
143
查看次数

为什么 printf 中 int 到 float 转换失败?

使用 int 进行 float 隐式转换时,失败并显示 printf()

#include <stdio.h>

int main(int argc, char **argv) {
    float s = 10.0;
    printf("%f %f %f %f\n", s, 0, s, 0); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

用它编译时gcc -g scale.c -o scale会输出垃圾

./scale
10.000000 10.000000 10.000000 -5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520512.000000
Run Code Online (Sandbox Code Playgroud)

如果我显式地将整数转换为浮点数,或者使用 a 0.0(这是 a double),它会按设计工作。

#include <stdio.h>

int main(int argc, char **argv) {
    float s = 10.0;
    printf("%f %f %f %f\n", s, 0.0, s, 0.0); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当用它编译时gcc -g scale.c -o scale确实输出预期的输出

./scale
10.000000 …
Run Code Online (Sandbox Code Playgroud)

c printf type-conversion implicit-conversion conversion-specifier

3
推荐指数
1
解决办法
149
查看次数

使用 printf 时 %f 和 %lf 可以互换吗?

在 w3resource.com 上的一篇文章中,我看到了以下代码:

double x, y;
pr1 = sqrt(pr1);
x = (-b + pr1)/(2*a);
y = (-b - pr1)/(2*a);
printf("Root1 = %.5lf\n", x);
printf("Root1 = %.5lf\n", y);
Run Code Online (Sandbox Code Playgroud)

文章说取三个浮点数。但在他们的解决方案(此代码片段)中,他们使用了%lf格式说明符。他们为什么使用%lf而不是%f?我也可以使用%f代替%lf浮点数吗?

如果我使用float关键字代替double, 并使用%f, 有什么问题吗?输出对我来说是一样的。

c double printf floating conversion-specifier

3
推荐指数
1
解决办法
160
查看次数

格式说明符:C 中的 %u 与 %d

#include<stdio.h>

int main(){
    int a = 3;
    printf("%u\n",&a);
    printf("%d\n",&a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我试图打印变量“a”的地址。现在使用两个不同的格式说明符“%u”和“%d”,打印两个不同的内存地址,我觉得很奇怪。

所以我的问题是两个格式说明符之间有什么区别?

c printf pointers undefined-behavior conversion-specifier

2
推荐指数
1
解决办法
446
查看次数