从函数返回多个值

谁能告诉我如何从函数中返回多个值? 请详细说明一些例子?

printf浮点数的可变小数位数

我找到了有趣的格式来打印非终止的固定长度字符串,如下所示: char newstr[40] = {0}; sprintf(newstr,”%.*s”, sizeof(mystr), mystr); 所以我想也许在printf命令下有一种打印浮点数的方法…… “%8.2f” 能够选择整数的小数位数。 像这样的东西: sprintf(mystr, “%d %f”, numberofdecimals, floatnumbervalue) 编辑 – 解决方案: (用于将浮点数舍入和清除到所需精度)。 int precision = 2; char kolf[16] = {0}; sprintf(kolf, “%8.*f”, precision, mystruct.myfloat); float kol = atof(kolf);

字符数组的大小和字符指针的大小

我有一段C代码,我不明白sizeof(…)函数是如何工作的: #include int main(){ const char firstname[] = “bobby”; const char* lastname = “eraserhead”; printf(“%lu\n”, sizeof(firstname) + sizeof(lastname)); return 0; } 在上面的代码中,sizeof(firstname)是6,sizeof(lastname)是8。 但是bobby是5个字符宽, eraserhead是11个宽。 我期待16 。 为什么sizeof对字符数组和字符指针的行为有所不同? 任何人都可以澄清吗?

C中未知矩阵的Dynamica分配

我需要获取用户输入的文件并将其乘以另一个文件。 我知道该怎么做。 问题是一个文件是一个数组,另一个是矩阵。 我需要在矩阵的第一行扫描以找到矩阵的大小,然后我需要从文件中动态分配矩阵和数组。 这是我到目前为止: #include #include #include #include int main() { int row1, col1; //These values need to be pulled from the first file// char filename1[100]; //Setting the file name for entry and setting the limit to 100// FILE* fp1; //FILE must be set as a pointer (FILE must also be capitalized)// printf(“Enter file […]

何时数组名称或函数名称“转换”为指针? (在C中)

1) 误解 : 每当使用C语言声明数组时,都会隐式创建指向数组第一个元素的指针(数组的名称)。 (是吗?我不这么认为!) 这个页面的前两行(虽然我不确定信息的正确性)说明相同。 正如我们所看到的,当我们声明一个数组时,为数组的单元分配一个连续的内存块,并且还分配一个指针单元(适当类型)并初始化为指向数组的第一个单元。 但是当我输出该指针中包含的地址和该指针的地址时 ,它们会变成相同的。 所以,我认为毕竟不会创建指针。 2)我从这个问题中选了这个 。 在大多数情况下,数组名称将转换为指针。 任何人都可以详细解释编译器何时决定将数组名转换为指针, 为什么 ? PS:请解释一下function 。 同样在这个链接中,给出了一个例子,说对于函数int square(int,int) ,任何square , &square , *square , **square指向相同的函数指针。 你可以解释吗? 编辑:代码段 int fruits[10]; printf(“Address IN constant pointer is %p\n”, fruits); printf(“Address OF constant pointer is %p\n”, &fruits); 输出: Address IN constant pointer is 0xbff99ca8 Address OF constant […]

字符串文字的C优化

刚刚在gdb中检查以下内容: char *a[] = {“one”,”two”,”three”,”four”}; char *b[] = {“one”,”two”,”three”,”four”}; char *c[] = {“two”,”three”,”four”,”five”}; char *d[] = {“one”,”three”,”four”,”six”}; 我得到以下内容: (gdb) pa $17 = {0x80961a4 “one”, 0x80961a8 “two”, 0x80961ac “three”, 0x80961b2 “four”} (gdb) pb $18 = {0x80961a4 “one”, 0x80961a8 “two”, 0x80961ac “three”, 0x80961b2 “four”} (gdb) pc $19 = {0x80961a8 “two”, 0x80961ac “three”, 0x80961b2 “four”, 0x80961b7 “five”} (gdb) […]

使C代码自动绘制图形

我编写了一个程序,将一个数据列表写入’.dat’文件,然后使用gnuplot单独绘制它。 有没有办法让我的代码自动绘制它? 我的输出forms如下: x-coord analytic approximation x-coord analytic approximation x-coord analytic approximation x-coord analytic approximation x-coord analytic approximation …. 理想情况下,当我运行代码时,图形也会打印出x标签,y标签和标题(可以从我的C代码更改)。 非常感谢。

为什么getchar()不能在控制台上识别返回EOF?

我在下面有一小段代码,我正在使用PellesC运行。 当代码执行并且我在控制台中输入了几个字符时,我按下回车键。 你能解释一下为什么printf(“%ld\n”, nc); 线似乎没有执行? 因为没有输出写入控制台。 #include int main(void) { long nc = 0; while(getchar() != EOF) { ++nc; } printf(“%ld\n”, nc); } 我决定使用K&R书彻底学习C,我很尴尬地说这个相当基本的例子让我难过。

getch已被弃用

在某个地方,我在大学里做了一些C和C ++,但我并没有太多关注C ++。 现在我想关注C ++,但是当我使用getch()函数时,我会从下面得到警告。 警告C4996:’getch’:不推荐使用此项目的POSIX名称。 而是使用符合ISO C ++的名称:_getch。 详细信息请参见在线帮助。 现在,我正在使用VS 2005 express,我不知道如何处理这个警告。 我需要在printf() getch()之后使用getch()一条错误消息或其他需要按键命中的内容。 你能帮帮我吗?

使用等于运算符==在C中比较两个字符串的相等性

int main (int argc, **argv) { if (argv[1] == “-hello”) printf(“True\n”); else printf(“False\n”); } #。/ myProg -hello 假 为什么? 我意识到strcmp(argv[1], “-hello”) == 0返回true …但为什么我不能使用相等运算符来比较两个C字符串?