Tag: printf

scanf中的换行符(\ n)

假设我写下面的代码: #include int main() { int a,b; scanf(“%d\n”,&a); printf(“%d”,a); return 0; } 输入并且光标在下一行闪烁而不打印a的值。 但是如果我删除\n字符,它会在下一行自动打印a的值。 即使我在scanf ( scanf(“%d\n”,&a); )中的%d之前放置一个\n ,它也不是将光标移动到下一行,而是取输入而不是输入在下一行。 那么, scanf自动接收下一行的输入吗? 并且\n不能与scanf函数一起使用?? 实际上,我的问题是要我在三行中输入三个整数。 写入Input: Three integers on three lines. 但是在尝试在scanf使用\n时,它只是在获取输入后显示下一行中的光标闪烁。

为什么snprintf会改变输出字符串?

我尝试使用snprintf将一些数字转换为字符串。 name1在逗号后应与name2具有相同的数字。 #include #define length 50 int main() { char name1 [length]; char name2 [length]; double step= 0.00001; unsigned long long int iterMax =100000000000; int k; for (k = 0; k <= 20; k++) { printf("numbers : k = %2d ; k*step = %f ;", k, k*step); snprintf(name1,length+1,"%f", iterMax+k*step); /* */ snprintf(name2,length+1, " %f", k*step); […]

返回参数不起作用 – 给我一些奇怪的错误

这是一个应该从字符串创建子字符串的简单程序,然后它应该将子字符串作为可以打印出来的东西返回。 它实际上是一个练习,只能改变子串函数。 问题是我找不到不会引发各种警告和错误的返回类型。 我该如何更改退货类型? static void panic(const char *serror) { printf(“%s”, serror); exit(1); } static void *xmalloc(size_t size) { void *ptr; if (size == 0) panic(“Size is 0!\n”); ptr = malloc(size); if (!ptr) panic(“No mem left!\n”); return ptr; } static char *substring(const char *str, off_t pos, size_t len) { char out [len]; int index; for(index […]

为什么我们不能以二进制forms打印十进制,八进制,hexforms的值?

为什么我们不能像C编程中那样用二进制打印数字。 例: int a=9; printf(“%b”,a); 我们可以用其他forms打印: 八进制printf(“%o”,a); decimal printf(“%d”,a); hexprintf(“%x”,a);

使用qsort和printf时出现分段错误

我正在尝试通过搜索md5哈希文件并使用bsearch在rockou数据库中找到它们来制作破解密码的程序。 我的问题是我遇到了由我的qsort或我的printf引起的分段错误(我运行Valgrind并且它说printf,但是操纵qsort会改变错误输出)。 我似乎无法在线找到解决方案,虽然我已经尝试刷新stdout以及在qsort函数中调整数组大小的不同方法。 char **dict = read_dict( argv[2] ); read_dict,我没有放在这里,因为它是一大堆代码,接受字典文件,将其拆分为字符串数组,将其格式化为hash:password,并为其设置mallocs空间。 然后它返回包含每个字符串的指针数组的指针。 int qcompare( const void *a, const void *b) { return strncmp( *((char **)a), *((char **)b), HASH_LEN); } qsort(dict, (sizeof(dict) / sizeof(dict[0])), sizeof(char *), qcompare); for (int i = 0; dict[i] != NULL; i++) { printf(“%s\n”, dict[i]); } 这里显示的printf不是我正在使用的那个,它只是我试图用来调试我的代码的一个更简单的。 这是我第一次发帖,所以希望我没有做任何格式化这个问题的错误。 提前感谢您提供的任何帮助。 read_dict按要求 char **read_dict(char *filename) […]

C snprintf追加struct member char *

当我打印出result-> value时,我得到垃圾(来自其他内存区域的文本)和free():无效指针 我试图安全地将一个字符串附加到现有的char *(结果的值成员,其结果是一个实例) unsigned const NAME_BUFFER=100; unsigned const VALUE_BUFFER=1000; typedef struct { char *name; int ID; char *value; } props; … static Bool myfunc(props *result) { unsigned char *pointer; result->name=malloc(NAME_BUFFER); result->value=malloc(VALUE_BUFFER); // not sure I need to do this, previous instances of the code produced // output such as the quick…(null)someoutput // which I […]

将int存储在char * 中

int main() { int n = 56; char buf[10]; //want char* buf instead sprintf(buf, “%i”, n); printf(“%s\n”, buf); return 0; } 这段代码有效,我的问题是如果我想要相同的行为,buf是一个char *?

如何使用scanf输入空格?

使用以下代码: char *name = malloc(sizeof(char) + 256); printf(“What is your name? “); scanf(“%s”, name); printf(“Hello %s. Nice to meet you.\n”, name); 用户可以输入他们的名字但是当他们输入一个像Lucas Aardvark这样的空间的名字时, scanf()切断Lucas之后的所有内容。 如何使scanf()允许空格

达到限制后恢复?nprintf

我有一个应用程序,使用snprintf和vsnprintf将字符串打印到缓冲区。 目前,如果它检测到溢出,它会在字符串的末尾添加一个>作为字符串被切断的标志,并向stderr输出警告。 我正试图找到一种方法让它在另一个缓冲区中恢复字符串[从它停止的地方]。 如果这是使用strncpy,那将很容易; 我知道写了多少字节,所以我可以从*(p + bytes_written)开始下一个打印; 但是,对于printf,我有两个问题; 首先,格式化说明符可能在格式字符串中占用最终字符串中的更多或更少空间,其次,我的valist可能会被部分解析。 有没有人对此有一个简单的解决方案? 编辑:我应该澄清我正在研究内存有限的嵌入式系统+没有动态分配[即,我不想使用动态分配]。 我可以打印255个字节的消息,但不能再打印,尽管我可以打印尽可能多的消息。 但是,我没有内存在堆栈上分配大量内存,而且我的print函数需要是线程安全的,所以我不能只分配一个全局/静态数组。

fprintf在经历循环时不会打印

我正在尝试在文档中打印某些内容,但它只适用于我尝试过的第一个h值! 我试图弄清楚自己,但我不得不在不到一个小时的时间内将这些代码交给我的教授,所以我有点绝望。 :/ #include #include double euler(double v0, double *t0, double h, double (*f)(double)); double dv(double v); int main(){ double vlim, t = 0; double *pt = &t; double h0 = 1.e-7; vlim = euler(0, pt, h0, dv); printf(“O tempo ea velocidade limite para um passo de %.0e s sao respectivamente:\n”, h0); printf(“%.0e se %lf […]