我需要在我的程序中读取文件,所以在提供路径时我想提供相对路径,因为要打开的所有文件都将位于当前文件夹中的某个文件夹中.我试过这个:
FILE *f=fopen("./abc/p.txt","r")
Run Code Online (Sandbox Code Playgroud)
abc是包含当前文件夹的文件夹,但fopen返回NULL.怎么做这件事?
是否可以继承haskell中的数据类型?让我们假设:
data Data1 = Data1
{ name :: String
} deriving (Show)
Run Code Online (Sandbox Code Playgroud)
在同一个模块上,我想做类似的事情:
data Data2 = Data1
let x = Data2 "Something"
Run Code Online (Sandbox Code Playgroud)
我希望Data2有这个领域name,'继承' Data1.
我知道那data Data2 = Data1不是那样做的.所以,我想知道是否有办法做到这一点.
谢谢
安德烈
我使用以下功能:
combinations :: Int -> [a] -> [[a]]
combinations k xs = combinations' (length xs) k xs
where combinations' n k' l@(y:ys)
| k' == 0 = [[]]
| k' >= n = [l]
| null l = []
| otherwise = Prelude.map (y :) (combinations' (n - 1) (k' - 1) ys) ++ combinations' (n - 1) k' ys
Run Code Online (Sandbox Code Playgroud)
它适用于我可以提出的任何示例,但是当我从我的大项目中的其他函数调用它时,在某些情况下我得到一个例外:
Exception: projekt.hs:(34,9)-(38,108): Non-exhaustive patterns in function combinations'
Run Code Online (Sandbox Code Playgroud)
上面的定义有问题吗?是否遗漏了一些案例?我认为otherwise处理任何不属于以前情况的东西.
在Turbo C/C++的日子里,您可以轻松修改字符串
char * str = "Hello";
str[1] = '1'; //it will make it H1llo;
Run Code Online (Sandbox Code Playgroud)
现在存储它们.bss,您不能直接修改它们.为什么?这不会使修改字符串变得困难吗?
对它有任何快速解决方法(但没有副作用)吗?我strdup()喜欢功能,但直接修改字符串真的很有趣.
我不明白为什么我能这样做:
#include "stdio.h"
#include "string.h"
char a[1][100];
void main(void) {
strcpy(a[0], "test1");
strcpy(a[1], "test2");
strcpy(a[6], "test3");
printf("%s", a[0]);
printf("%s", a[1]);
printf("%s", a[6]);
}
Run Code Online (Sandbox Code Playgroud)
将返回:
test1test2test3
Run Code Online (Sandbox Code Playgroud)
在我的理解中,当我这样做时,char a[1][100]我正在创建一个带有2个元素的二维数组,a[0]并且a[1]每个数组都指向一个包含100个字符的数组.为什么我可以分配任何东西a[6]?那不应该是出界的吗?记忆力在哪里?
谢谢你清理它.
我正在制作一个计算器应用程序,我想看看我是否可以调用我在if语句中设置的变量; if语句结束后.我可以做吗?我尝试了几件事,但我无法让它发挥作用.
int main()
{
// ...
int finished;
do{
// ...
if(operator == 1){
int finished = number[1] + number[2];
printf("\n\n%d \+ %d is: %d", number[1], number[2], finished);
}
if(operator == 2){
int finished = number[1] - number[2];
printf("\n\n%d \- %d is: %d", number[1], number[2], finished);
}
// ...
printf("\ndebug %d\n: ", finished);
// ...
} while (doAgain == 1);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 这是一个问题:该计划的输出是什么?
#include<stdio.h>
int main()
{
int A[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20} };
int (*v)[10]=A;
printf("**v=%d\n",**v);
printf("**(v+1)=%d\n",**(v+1));
printf("*(*v+1)=%d\n",*(*v+1));
printf("*(v[0]+1)=%d\n",*(v[0]+1));
printf("*(v[1])=%d\n",*(v[1]));
}
Run Code Online (Sandbox Code Playgroud)
输出:
**v=1
**(v+1)=11
*(*v+1)=2
*(v[0]+1)=2
*(v[1])=11
Run Code Online (Sandbox Code Playgroud)
特别是,我不太清楚*v如何将阵列A分成10个部分,请告诉我每个输出的原因.谢谢!