所以我正在研究一个需要格式化输出的程序.输出应该是对齐的,并且它确实使用小数字:

但是当我给出大数字时,它就不再起作用了:

我的代码确实是,但这是打印主输出的部分:
/* The following code prints out the data */
printf("\n\nStatistics: \n\n");
printf("Descrip\t\tNumber:\t\tTotal:\t\tAverage:\n\n");
printf("Normal\t\t%d\t\t%d\t\t%d\n\n",normal_counter,normal_total,normal_average);
printf("Short\t\t%d\t\t%d\t\t%d\n\n",short_counter,short_total,short_average);
printf("Long\t\t%d\t\t%d\t\t%d\n\n",long_counter,long_total,long_average);
printf("Overall\t\t%d\t\t%d\t\t%d\n\n",overall_counter,overall_total,overall_average);
Run Code Online (Sandbox Code Playgroud)
如何使输出对齐?
你好,我对C很新,简而言之,我在课堂上做了以下工作:
foo (char *var) {
printf(var);
}
Run Code Online (Sandbox Code Playgroud)
我被告知这是不好的做法和不安全但我的导师没有得到关于此的详细信息.我假设如果var的字符串值可由用户控制,它可能用于执行缓冲区溢出?我如何正确强化此代码?我是否必须限制str长度?
干杯谢谢!
可能重复:
使用printf打印浮动时额外的前导零?
我试图让这个C程序的输出有占位符零,因为该程序的输出将用作另一个程序的输入.现在,我正在使用以下打印行.
fprintf(fp1, "06 BR%d%d %3.4f%3.4f%3.4f\n",i,d,X,Y,Z);
i = index for the loop
d = index for a second loop
X = double for a Cartesian system
Y = double for a Cartesian system
Z = double for a Cartesian system
Run Code Online (Sandbox Code Playgroud)
现在输出看起来像这样:
06 BR12 1.00001.00001.0000
Run Code Online (Sandbox Code Playgroud)
我希望它像下面这样:
06 BR0102 001.0000001.0000001.000
Run Code Online (Sandbox Code Playgroud)
我知道我可以手动添加占位零(如果我<10,添加一个占位符等)但是有一种更有效的方法输出占位符零而不是简单地在if语句中添加它们吗?
先感谢您.
我正在编写一个程序,它使用1个语句来读取用户的6个浮点数.然后让它打印3行中的6个数字,满足以下所有要求:
(1)数字按照读入的相反顺序打印
(2)它们在3行上:第一行有1个数字,下一行有2个数字,最后一行有3个数字
(3)将数字对齐,使它们采用列格式,右对齐,小数点后1位
这是我对前两个要求的尝试
#include <stdio.h>
int main(void)
{
//variable definitions
float f1,f2,f3,f4,f5,f6;
printf ("Enter 6 float numbers, separated by commas: ");
scanf ("%f1,%f2,%f3,%f4,%f5,%f6",&f1,&f2,&f3,&f4,&f5,&f6);
printf ("%f6\n",f6);
printf ("%f5,%f4\n",f5,f4);
printf ("%f3,%f2,%f1\n",f3,f2,f1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于我的初学者来说,它非常有意义.
这是我运行时的结果
输入6个浮点数,用逗号分隔:0.2,3.2,0.1,0.5,0.6,0.7
数字是:
-107374176.0000006
-107374176.0000005,-107374176.0000004
-107374176.0000003,-107374176.0000002,0.2000001
按任意键继续 ...
所有这些都是垃圾输出,除了最后一个.感谢所有的帮助!
有以下功能:
void readAndPrint(FILE * f) {
int c;
while(c = fgetc(f) != EOF) {
printf("%d", c);
}
}
Run Code Online (Sandbox Code Playgroud)
在main()体中我使用以下代码来使用上面的函数:
FILE * pFile;
pFile=fopen ("myfile.txt","r");
readAndPrint(pFile)
Run Code Online (Sandbox Code Playgroud)
;
无论我放入myfile.txt,程序都打印出来.例如,对于abc,打印出111.
我知道函数中的c应该声明为int以正确地将它与EOF进行比较.另外,我希望打印出来自文本文件中每个字符的ASCII集的int代码(97表示a,...).我无法弄清楚为什么它会打印出"那些"...你知道原因吗?先感谢您.
这可能是一个简单的答案.但我似乎无法找到答案.
假设我想:
printf( "printf(\"%d\", x );" );
Run Code Online (Sandbox Code Playgroud)
我希望输出字面上是: printf( "%d", x );
有办法吗?如果我只是输入我上面写的代码,一个数字会被放入%d,但我不希望放在那里.我只想要文字%d.
我在Assembly(x86-64)中编写了一个程序,并从C文件包装器调用它来使用printf和scanf函数.但是,当我尝试链接它时,我收到以下错误:
$ nasm -f macho64 -l Parallelograms.lis -o assembly.o Parallelograms.asm
$ gcc -c -Wall -m64 -o main.o ParallelogramDriver.c
$ gcc -m64 -o main.out main.o assembly.o
Undefined symbols for architecture x86_64:
"_calcAndPrint", referenced from:
_main in main.o
"printf", referenced from:
calcAndPrint in assembly.o
"scanf", referenced from:
calcAndPrint in assembly.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我相信这与macho64旗帜有关.如果我使用elf64,它将不会捕获printf或scanf错误.但是,elf64在Mac上是一种不兼容的文件格式(据我所知).
这是我的C文件(ParallelogramDriver.c):
#include <stdio.h>
#include <stdint.h> //For C99 compatability
extern int calcAndPrint();
int main(int argc, char* argv[])
{
//Run …Run Code Online (Sandbox Code Playgroud) 我正在学习更多的PHP教程,特别是DevZone PHP 101,我很困惑:
echo .sprintf("%4.2f", (2 * $radius * pi()))
Run Code Online (Sandbox Code Playgroud)
我找到了这个
我认为这意味着使用第一个后续参数的值产生一个四个位置宽,两个小数位的浮点字段.
这来自C/C++编程语言系列.sprintf()将第一个参数作为格式语句.以%开头的任何内容都是字段说明符; 其他任何东西都只是可打印的文字.因此,如果您给出一个包含所有文本且没有说明符的格式语句,它将完全按照它出现的方式打印.使用格式说明符,它需要处理数据.
但在尝试了一些不同的价值后,我仍然没有得到它.在我看来,如果在这种情况下它的目的只是将小数限制为2个位置,我必须放置的是
.sprintf("%.2f", (2 * $radius * pi()))
Run Code Online (Sandbox Code Playgroud)
前面的4点有什么意义?在PHP手册中,它让我相信它确定字符的总数应该是4但是(a)不是这种情况,因为小数点使它成为5个字符,而(b)不是这种情况,因为我尝试将其更改为更大的数字,如%8.2f,它没有在任何一端粘贴任何零.有人可以更好地解释一下.
谢谢!
我想实现一个Myprintf()接受类似参数的函数printf().现在我这样做:
sprintf(demoString, "Num=%d String=%s", num, str);
Myprintf(demoString);
Run Code Online (Sandbox Code Playgroud)
我想将此函数调用替换为:
Myprintf("Num=%d String=%s", num, str);
Run Code Online (Sandbox Code Playgroud)
这怎么可能?
我有一些C++代码,我需要在sprintf中使用CString.在这段代码中,我创建的文件名是由sprintf定义的CStrings.代码如下.
double Number;
Number = 0.25;
char buffer [50];
CString sFile;
sFile = sprintf(buffer,"TRJFPICD(%3.3f).txt",Number);
CString SFFile;
SFFile = sprintf(buffer,"TRJFPICV(%3.3f).txt",Number);
CString SFFFile;
SFFFile = sprintf(buffer,"TRJFPICA(%3.3f).txt",Number);
Run Code Online (Sandbox Code Playgroud)
所需的文件名是TRJFPICD(0.25).txt, TRJFPICV(0.25).txt,和TRJFPICA(0.25).txt.我必须使用CStrings代码.
我得到的错误是' operator ='含糊不清.