标签: printf

在C中对齐输出值

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

这有效

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

这不起作用

我的代码确实是,但这是打印主输出的部分:

/* 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 printf stdio

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

安全处理字符串变量

你好,我对C很新,简而言之,我在课堂上做了以下工作:

foo (char *var) {
  printf(var);
}
Run Code Online (Sandbox Code Playgroud)

我被告知这是不好的做法和不安全但我的导师没有得到关于此的详细信息.我假设如果var的字符串值可由用户控制,它可能用于执行缓冲区溢出?我如何正确强化此代码?我是否必须限制str长度?

干杯谢谢!

c security string variables printf

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

C格式化字符串 - 如何将前导零添加到float和int值?

可能重复:
使用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语句中添加它们吗?

先感谢您.

c formatting printf placeholder output

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

初学者C - 以相反的顺序打印用户的浮动输入

我正在编写一个程序,它使用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

按任意键继续 ...

所有这些都是垃圾输出,除了最后一个.感谢所有的帮助!

c printf scanf

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

fgetc总是返回值1

有以下功能:

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,...).我无法弄清楚为什么它会打印出"那些"...你知道原因吗?先感谢您.

c printf eof getc fgetc

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

如何从字面上打印f%d

如何从字面上打印f%d

这可能是一个简单的答案.但我似乎无法找到答案.

假设我想:

printf( "printf(\"%d\", x );" );
Run Code Online (Sandbox Code Playgroud)

我希望输出字面上是: printf( "%d", x );

有办法吗?如果我只是输入我上面写的代码,一个数字会被放入%d,但我不希望放在那里.我只想要文字%d.

c printf

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

无法在Assembly OS(x86-64)和Mac OSX上的C文件中链接printf和scanf

我在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)

c macos assembly printf nasm

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

.sprintf("%4.2f",value)如何在PHP中运行?

我正在学习更多的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,它没有在任何一端粘贴任何零.有人可以更好地解释一下.

谢谢!

php printf

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

函数参数,如C中的printf

我想实现一个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 printf

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

将CString与sprintf一起使用

我有一些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 ='含糊不清.

c++ printf cstring

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

标签 统计

printf ×10

c ×8

assembly ×1

c++ ×1

cstring ×1

eof ×1

fgetc ×1

formatting ×1

getc ×1

macos ×1

nasm ×1

output ×1

php ×1

placeholder ×1

scanf ×1

security ×1

stdio ×1

string ×1

variables ×1