我是编程新手,我尝试构建各种有趣的小应用程序,以便了解基础知识。我已经从C开始真正从底部开始,所以下面指的是C。
所以基本上我需要数组a []并替换[],它们都是200长填充随机数。
我想在[]中搜索值32(ele),并用replace []中的相应值替换该值的任何出现。
E.g。 if:a [22] = 32,替换[22] = 78 =>一个[22] = 78
同时我希望它“记录”索引号(22)并将其记录到文件中。
我无法多次通过[]并替换每个实例。它只替换1个实例然后中断。
我没有错误信息。以下代码。希望你能帮助新手。 如果您有答案,请花一点时间解释如何/为什么。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
FILE *ifp, *ofp;
int ix;
int ik;
int i;
int change;
int count = 0;
int ele = 32;
int num = 200;
int a[200];
int replace[200];
void swap(int a[], int replace[], int change)
{
int temp = replace[change];
a[change] = replace[change];
a[change] = temp;
ifp = fopen("/Users/kjaerolsen/tmp/ilog.txt", "a+");
fprintf(ifp, "%d\n", change);
fclose(ifp);
}
int main(int argc, char *argv[]) {
// creates array with random numbers to draw new numbers from.
srand(time(NULL));
for (int ik = 0; ik < 200; ik++)
{
rand();
replace[ik] = rand() % 200; // / rand_max;
}
for (int ik = 0; ik < 200; ik++)
{
fprintf(ifp, "%d\n", replace[ik]);
}
// creeates main array with random numbers.
srand(time(NULL));
for (int ix = 0; ix < 200; ix++)
{
rand();
a[ix] = rand() % 200; // / rand_max;
}
for (int ix = 0; ix < 200; ix++)
{
printf("plads %d i array: %d\n",ix, a[ix]);
}
// Looks for number 32 (ele) in array
i = 0;
for (int i =0; i < 200; i++)
{
change++;
swap(int a[], int replace[], int change)
count++;
}
if (count == 0)
printf("%d is not present in array.\n", ele);
else
printf("%d is present %d times in array.\n", ele, count);
// Opens the file and rewrites the new array.
ifp = fopen("file1.txt", "w+");
for (int ix = 0; ix < 200; ix++)
{
fprintf(ifp, "%d\n", a[ix]);
}
fclose(ifp);
printf("very done...");
return (0);
}
答案 0 :(得分:0)
必须在第二个循环之前打开ifp并在之后fclose。您当前的代码出现了分段错误:
ifp = fopen( ... );
for (int ik = 0; ik < 200; ik++)
{
fprintf(ifp, "%d\n", replace[ik]);
}
fclose( ifp );
此外,您可以使用三个XOR进行交换:
a ^= b;
b ^= a;
a ^= b;
并且没有临时变量;
答案 1 :(得分:0)
非常感谢你的帮助。我终于成功地使它发挥作用 - 它很美。我将它从实际函数移到循环中,因为没有卷轴需要调用函数。其次,我错过了最高IF
。但最重要的是@micarelli你对XOR的建议就行了。
对于像你这样的几个核心编码员来说,也许并不多,但它确实令人满意。 我在下面发布了最后一段代码。
i = 0;
for (int i =0; i < 200; i++)
if (a[i] == ele)
{
a[i] ^= replace[i];
count++;
}
if ( count == 0 )
printf("%d is not present in array.\n", ele);
else
printf("%d is present %d times in array.\n", ele, count);
// Opens the file and rewrites the new array.
ifp = fopen("/Users/kjaerolsen/tmp/file1.txt", "w+");
for (int ix = 0; ix < 200; ix++)
{
fprintf(ifp, "%d\n", a[ix]);
}
fclose(ifp);