会议记录:
>type lookma.c
int main() {
printf("%s", "no stdio.h");
}
>cl lookma.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
lookma.c
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation. All rights reserved.
/out:lookma.exe
lookma.obj
>lookma
no stdio.h
Run Code Online (Sandbox Code Playgroud) 我需要将C中的一系列数字与printf()对齐,如下例所示:
-------1
-------5
------50
-----100
----1000
Run Code Online (Sandbox Code Playgroud)
当然,所有这些之间都有数字,但它与手头的问题无关......哦,将破折号视为空格,我使用破折号,因此更容易理解我想要的东西.
我只能做到这一点:
----1---
----5---
----50--
----100-
----1000
Run Code Online (Sandbox Code Playgroud)
或这个:
---1
---5
--50
-100
1000
Run Code Online (Sandbox Code Playgroud)
但这些都不是我想要的,我只能使用printf()来实现第一个例子中显示的内容.有可能吗?
编辑:
对不起的人,我很匆忙,并没有很好地解释自己...我的最后一个例子和你的所有建议(使用像"%8d"之类的东西)不起作用,因为虽然最后一个数字是1000,但它没有对于那件事,一定要一直到1000甚至100或10.
无论要显示的位数,我最多只需要4个前导空格作为最大数字.假设我必须显示从1到1000(A)和1到100(B)的数字,我使用两个"%4d",这将是输出:
A:
---1
....
1000
Run Code Online (Sandbox Code Playgroud)
哪个是我想要的输出...
B:
---1
....
-100
Run Code Online (Sandbox Code Playgroud)
这不是我想要的输出,我实际上想要这个:
--1
...
100
Run Code Online (Sandbox Code Playgroud)
但就像我说的,我不知道我必须打印的确切数字,它可以有1位数,它可以有2个,3个或更多,该函数应该为所有人准备.而且我想要额外增加四个前导空间,但那并不相关.
编辑2: 似乎我想要的,我需要它的方式,这是不可能的(查看David Thornley和Blank Xavier的答案和我的评论).谢谢大家的时间.
任何已经工作超过一周的C程序员遇到了因printf使用更多格式说明符而非实际参数调用而导致的崩溃,例如:
printf("Gonna %s and %s, %s!", "crash", "burn");
Run Code Online (Sandbox Code Playgroud)
但是,当你向printf 传递太多参数时,是否会发生类似的坏事?
printf("Gonna %s and %s!", "crash", "burn", "dude");
Run Code Online (Sandbox Code Playgroud)
我对x86/x64程序集的了解使我相信这是无害的,虽然我不相信没有一些边缘条件我缺少,而且我不知道其他架构.这种情况是否保证是无害的,或者这里是否存在潜在的崩溃诱因?
我是编程新手,所以我事先道歉.我正在运行一个程序,并且System.out.printf在Java中遇到问题.我知道程序中的其他所有内容都正常工作(测试过).然而,这似乎不起作用.
错误是:
线程"main"中的异常java.util.IllegalFormatConversionException:d!=
java.util.Formatter中的java.lang.Double $ java.util.Formatter上的FormatSpecifier.failConversion(未知源)
$
java上的FormatSpecifier.printInteger(未知源).util.Formatter $ FormatSpecifier.print(来源不明)
在java.util.Formatter.format(来源不明)
在java.io.PrintStream.format(来源不明)
在java.io.PrintStream.printf(来源不明)
在Advisor_Score .主要(Advisor_Score.java:17)
我的代码是:
import java.lang.Math;
public class Advisor_Score {
public static void main(String[] args){
double l[] = {101,1,1,1};
double k[] = {102,2,2,4};
double m[] = {103,5,5,5,5,5,5,5};
double All_users[][]={l,k,m};
double sum[]=new double [All_users.length];
double [] raw_advisor=new double [All_users.length];
double []advisor_score= new double [All_users.length];
for (int i=0;i<All_users.length;i++){
for(int j=1;j<All_users[i].length;j++){
sum[i]+=All_users[i][j];
}
raw_advisor[i]=((sum[i]-(3*(All_users[i].length-1)))/4);
advisor_score[i]= 2.5+(2.5*(1-Math.pow(Math.E, -.5*raw_advisor[i])));
System.out.printf("%d: %d\n", All_users[i][0], advisor_score[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
不确定为什么它不起作用.
打印指针时遇到问题.每次我尝试编译下面的程序时,我都会收到以下错误:
pointers.c:11: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int *’
Run Code Online (Sandbox Code Playgroud)
我显然在这里遗漏了一些简单的东西,但是从我见过的类似代码的其他考试中,这应该是有效的.
这是代码,任何帮助都会很棒!
#include <stdio.h>
int main(void)
{
int x = 99;
int *pt1;
pt1 = &x;
printf("Value at p1: %d\n", *pt1);
printf("Address of p1: %p\n", pt1);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 所以,我需要创建以下函数,但是如果没有复杂的数学运算,我的脑袋就不会想到PHP的任何可能性.
我现在已经在Google上搜索了2个小时,唯一出现的就是Excel论坛.是否可以使用一些简单的PHP行?
我已经阅读了很多专家F#,正在构建一个实际的应用程序.在调试时,我已经习惯于传递这样的fsi命令,以使repl窗口中的内容清晰可见:
fsi.AddPrinter(fun (x : myType) -> myType.ToString())
Run Code Online (Sandbox Code Playgroud)
我想扩展它以使用printf格式化程序,所以我可以输入例如
printf "%A" instanceOfMyType
Run Code Online (Sandbox Code Playgroud)
并控制自定义类型的输出.本书暗示可以做到这一点(第93页,"可以扩展通用结构格式以适用于任何用户定义的数据类型,F#网站上涵盖的主题"),但我没有找到任何关于如何实际上实现这一点.有谁知道怎么样?它甚至可能吗?
编辑:
我应该包含一个代码示例,它是我正在处理的记录类型,例如
type myType =
{a: int}
override m.ToString() = "hello"
let t = {a=5}
printfn "%A" t
printfn "%A" (box t)
Run Code Online (Sandbox Code Playgroud)
两个印刷语句产生:
{a = 5;}
Run Code Online (Sandbox Code Playgroud) 我期待这段简单的代码
printf("foo\b\tbar\n");
Run Code Online (Sandbox Code Playgroud)
用"\ t"替换"o"并产生以下输出
fo bar
Run Code Online (Sandbox Code Playgroud)
(假设每8个字符发生制表位).相反,我得到了
foo bar
Run Code Online (Sandbox Code Playgroud)
似乎我的shell将\ b解释为"将游标移回一个位置"并将\ t解释为"将光标移动到下一个制表位".这种行为是否特定于我正在运行代码的shell?我应该期望不同系统有不同的行为吗?
我目前正在使用显式强制转换unsigned long long并使用%llu它来打印它,但既然size_t有说明%z符,为什么没有clock_t?
甚至没有宏观.也许我可以假设在x64系统(操作系统和CPU)size_t上长度为8个字节(即使在这种情况下,他们已提供%z),但是呢clock_t?
我有一个简单的程序:
#include <stdio.h>
int main()
{
long i = 16843009;
printf ("%02x \n" ,i);
}
Run Code Online (Sandbox Code Playgroud)
我使用%02x格式说明符来获得2个char输出,但是,我得到的输出是:
1010101
Run Code Online (Sandbox Code Playgroud)
虽然我期待它:01010101.