我在C std99中使用bool数据类型,其定义在中定义<stdbool.h>.现在我希望用户给我输入.我必须在scanf中使用什么格式说明符来从用户输入1字节的布尔值,然后在我的程序中操作它.
printf当我使用ASCII表中的NULL字符时,为什么要打印空格而不是停止?这就是我的意思:
printf("Hello%c, world", 0); //Hello , world
printf("Hello%c, world", '\0'); //Hello , world
Run Code Online (Sandbox Code Playgroud)
只有当我将转义字符放在字符串本身时printf才会停止字符串:
printf("Hello\0, world"); //Hello
Run Code Online (Sandbox Code Playgroud)
我在Windows 8,Windows 10(使用cygwin,MinGW,Netbeans,Code :: Blocks),XUbuntu上试过这个,它都是一样的.
问题出在哪儿?我问过我的一个朋友,但他说他没有这样的问题,所有三个例子都以同样的方式执行.
在C++中,我可以做到这一点,但我不知道如何在C#中做到这一点.基本上我想在我的Visual Studio 2008调试器的监视窗口中使用格式说明符来仅查看切片或数组的一部分.例如,如果我有这样的2D数组:
int[,] myArray = new int[5,15]
Run Code Online (Sandbox Code Playgroud)
我可能只想查看列表中的最后15个项目,所以我希望能够将它放入我的观察窗口(或类似的东西):
myArray[5],15
Run Code Online (Sandbox Code Playgroud)
在Visual Studio中有这样的东西吗?
请考虑以下Python代码段:
for ix in [0.02, 0.2, 2, 20, 200, 2000]:
iss=str(ix) + "e9"
isf=float(iss)
print(iss + "\t=> " + ("%04.03e" % isf ) + " (" + str(isf) + ")")
Run Code Online (Sandbox Code Playgroud)
它生成以下输出:
0.02e9 => 2.000e+07 (20000000.0)
0.2e9 => 2.000e+08 (200000000.0)
2e9 => 2.000e+09 (2000000000.0)
20e9 => 2.000e+10 (20000000000.0)
200e9 => 2.000e+11 (2e+11)
2000e9 => 2.000e+12 (2e+12)
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 是否有可能以某种方式"回去"?那是:
2.000e+07 => 0.02e9
2.000e+08 => 0.2e9
2.000e+09 => 2e9
2.000e+10 => 20e9
2.000e+11 => 200e9
2.000e+12 => 2000e9
Run Code Online (Sandbox Code Playgroud)
......我指定我希望指数为" e+09"; …
说明符如何%p并%Fp在以下代码中工作?
void main()
{
int i=85;
printf("%p %Fp",i,i);
getch();
}
Run Code Online (Sandbox Code Playgroud)
我得到的是o/p 0000000000000055 0000000000000055
我听说指针首先应该转换为void以确保不同平台上的值的一致性,并且应该使用%p格式说明符.它为什么以及究竟是什么问题?
int x=100;
int *pi=&x;
printf("value of pi is: %p",(void*)pi);
Run Code Online (Sandbox Code Playgroud) 我需要使用printf()来打印uint16_t.这个SO答案(如何打印uint32_t和uint16_t变量值?)说我需要使用inttypes.h.
但是,我正在使用嵌入式系统,并且inttypes.h不可用.当uint16_t的格式说明符不可用时,如何打印uint16_t?
为什么要使用格式字符串强制使用元组(或字典):
"%s %d" % ("text", 42)
Run Code Online (Sandbox Code Playgroud)
以下会有什么不利之处?
"%s %d" % ["text", 42]
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用fscanf读取数据,'e'例如,输入的一部分是一个浮点数后跟字母41.72elapsed.在编写strng时fscanf,我尝试使用"%felapsed",但这不起作用,就像%fe它自己的格式说明符一样.我怎么用这个来读fscanf?
编辑:这是代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define CHAR_MAX 1024
int main(int argc, char **argv)
{
FILE *file_in = fopen(argv[1], "r+");
char out_name[CHAR_MAX];
strcpy(out_name, argv[1]);
strcat(out_name, ".csv");
FILE *csv_out = fopen(out_name, "w");
int minutes;
float seconds;
fprintf(csv_out, "Trial #, Execution Time\n");
for (int i = 0; fscanf(file_in, "%*fuser %*fsystem %d:%felapsed %*d%%CPU (%*davgtest+%*davgdata %*dmaxresident)k\n%*dinputs+%*doutputs (%*dmajor+%*dminor)pagefaults %*dswaps\n", &minutes, &seconds) == 2; i++) {
fprintf(csv_out, "%d, %d:%.2f\n", i, …Run Code Online (Sandbox Code Playgroud) 说我有一个字符数组:
#define LEN 10
char arr[LEN + 1];
Run Code Online (Sandbox Code Playgroud)
让我们做一些scanf操作:
scanf("Name: %s", arr);
Run Code Online (Sandbox Code Playgroud)
如果有人输入的名称超过10个字符,这可能会很危险.所以最好用这个:
scanf("Name: %10s", arr);
Run Code Online (Sandbox Code Playgroud)
那么现在如果LEN改变我会遇到麻烦.我将不得不通过整个代码来纠正我10在上下文中使用的每一行arr.所以我想到了这样的事:
scanf("Name: %LENs", arr);
Run Code Online (Sandbox Code Playgroud)
但这不起作用.LEN由于在字符串中使用,因此预处理器无法解析.
如何在格式字符串中使用define?