Tag: printf

浮点错误是什么-1。#J是什么意思?

最近,有时(很少)从我们的应用程序导出数据时,导出日志包含看起来像“-1。#J”的浮点值。 我无法重现它所以我不知道浮点数在二进制文件中是什么样的,或者Visual Studio如何显示它。 我试着查看printf的源代码,但没有找到任何东西(不是100%肯定我看了正确的版本虽然…)。 我试过谷歌搜索但谷歌抛出任何#,似乎。 我找不到任何浮动错误列表。

如何控制C printf%e中’e’后的指数位数?

我想控制C printf %e ‘e’后的指数位数? 例如,C printf(“%e”)结果为2.35e+03 ,但我想要2.35e+003 ,我需要3位指数,我该如何使用printf ? 码: #include int main() { double x=34523423.52342353; printf(“%.3g\n%.3e”,x,x); return 0; } 结果: http : //codepad.org/dSLzQIrn 3.45e+07 3.452e+07 我想要 3.45e+007 3.452e+007 但有趣的是,我在Windows中使用MinGW获得了正确的结果。

为什么printf打印错误的值?

当我使用printf(“%f\n”, myNumber)打印int时,为什么会得到错误的值? 我不明白为什么它用%d打印好,但不用%f打印。 它不应该只是添加额外的零? int a = 1; int b = 10; int c = 100; int d = 1000; int e = 10000; printf(“%d %d %d %d %d\n”, a, b, c, d, e); //prints fine printf(“%f %f %f %f %f\n”, a, b, c, d, e); //prints weird stuff

什么浮点值使sprintf_s()产生“1.#QO”?

我有一些(遗留嵌入式c)代码,它通过一些sprintf调用生成.csv文件。 偶尔我会看到1.#QO值。 我已经尝试重现那些应该给出负无穷大,正无穷大和NaN的条件的值,但它们似乎都没有给我神奇的1.#QO结果。 那产生这个价值的是什么呢? ……是的,我知道在产生这种价值的数学中显然出现了问题,但理解它的含义将有助于调试工作。 [编辑1]进行转换的实际行是: sprintf_s(txt, CSV_HEADER_SIZE, “%.3f”, value); 哪里: #define CSV_HEADER_SIZE (100) char txt[CSV_HEADER_SIZE]; 我正在使用MS Visual Studio 2008进行编译。 [编辑2]更多挖掘显示0xFFFFFFFF给-1.#QO : unsigned int i = 0xFFFFFFFF; float* f = (float*)&i; printf(“%.3f”, *f); // gives -1.#QO ..并在Visual Studio调试器中查看它将其扩展为-1.#QNAN00所以看起来这可能是微软特定的NaN表示?

转义printf()中的所有特殊字符

是否有一种简单的方法来转义printf()函数中的所有特殊字符? 我想知道如何做到这一点的原因是因为我打印了一些字符,其中可能包含特殊字符,如空字符( \0 )和哔声字符,我只想查看字符串的内容。 目前我正在使用以下代码 它适用于空字符。 逃脱所有特殊角色的最简单方法是什么? int length; char* data = GetData( length ); // Fills the length as reference for( int i = 0; i < length; i++ ) { char c = data[ i ]; printf( "%c", ( c == 0 ? '\\0' : data[ i ] ) ); }

Arduino:printf / fprintf打印问号而不是浮点数

我有一个Arduino草图的以下代码: #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); static FILE lcdout = {0} ; static int lcd_putchar(char ch, FILE* stream) { lcd.write(ch) ; return (0) ; } void setup() { lcd.begin(16, 2); fdev_setup_stream (&lcdout, lcd_putchar, NULL, _FDEV_SETUP_WRITE); } void loop() { stdout = &lcdout; printf(“%.2f Volts”, 2.0); } 问题出现在代码的最后一行。 这应该打印出“2.00伏特”,而是打印“?伏特”(问号而不是实际的浮点值)。 如果我尝试格式化整数,这很有用。 所以基本上,如果我用以下内容替换printf行,它将正常工作: printf(“%d Volts”, […]

printf函数的问题?

我写了以下程序 #include main() { int i = 2; float c = 4.5; printf(“%d\n”,c); printf(“%f\n”,i); return 0; } 虽然我知道这是错误的做法,当我运行程序时,我得到了答案 0 4.500000 但是当我以这种方式交换printf语句时 #include main() { int i = 2; float c = 4.5; printf(“%f\n”,i); printf(“%d\n”,c); return 0; } 输出是 0.000000 0 我无法理解发生了什么,任何人都会解释我。

C:函数在代码中跳过用户输入

我遇到了这个function(战舰游戏的一部分)的问题,它将完美地运行它,但在后续的执行中,它会跳过: scanf(“%c”,&rChar); 出于某种原因,rChar在没有上述代码的用户输入的情况下变成另一个值。 我试过在整个函数中输入显示rChar值的printf语句。 函数Conv_rChar_Int()将用户输入的Char转换为整数值。 但是因为rChar没有作为指针传递,所以rChar的值rChar保持不变,直到用户在下一次迭代中替换它。 (再次使用printfvalidation)。 奇怪的是,它在这些代码行之间发生了变化。 并且从不提示用户输入rChar 。 printf(“please enter the row you want to place your %d ship in\n”,length); scanf(“%c”,&rChar); 请记住,它只发生在第一次之后。 即使我在每次迭代后重新初始化变量rChar , r , c和dir ,这个问题仍然会发生。 我99%肯定问题是在这个函数内而不是在它内部调用的任何函数中(因为rChar在每一行之后保持不变,除了上面的两行之外)。 提前感谢您的帮助。 如果您对代码有任何疑问,我会尝试解释一下。 int Gen_Ship_Place(int length, int flag3, int PlayGrid[10][10]){ int ShipPlaceFlag = 0; //coordinates and direction int r; char rChar; int c; int dir; […]

Turbo C ++:为什么printf在没有传递变量的情况下打印期望值?

在多项选择测试中提出了一个问题:以下程序的输出结果如何: #include int main(void) { int a = 10, b = 5, c = 2; printf(“%d %d %d\n”); return 0; } 选择是10,5和2的各种排列。出于某种原因,它适用于我们在大学时使用的Turbo C ++。 但是,在使用gcc(在启用-Wall时发出警告)或clang(启用了-Wformat并在默认情况下发出警告)或在Visual C ++中编译时,它不会。 正如预期的那样,输出是垃圾值。 我的猜测是它与Turbo C ++是16位,在32位Windows XP上运行这一事实有关,或者TCC在标准方面很糟糕。

将int作为float打印时printf的行为是什么?

我在windows7上使用dev cpp来编译我的代码。 int d = 0x12; char* e = (char*)&d; printf(“%d %d\n”, sizeof (int), sizeof (float)); printf(“%p %p\n”, &d, (float*)&d); printf(“%p %p %p %p %p\n”, &d, &e[0], &e[1], &e[2], &e[3]); printf(” %d | %x | %#1x | %#1x | %#1x |%p\n”, d, e[0], e[1], e[2], e[3], &e[0]); getchar(); 4 4 0028FF40 0028FF40 0028FF40 0028FF40 0028FF41 […]