我试图从stdin读取多行,其中偶数行是字符串,奇数行是用空格分隔的数字。我试图将数字读作整数,将字符串读作...字符串。这是学校项目的一部分,但并不是整个项目;我管理了其余的东西,但我无法实际从stdin中获取字符串和int。
当我是偶数时,我将每个名字添加到实验中(我尝试将其用作行号) 当我遇到一个空格时,我尝试使用malloc附加一个字符串n并将其存储为二维数组数据中的int,使用int a来浏览该行。
然后印刷部分只是试图表明它的工作原理而且它没有。我没有破坏任何阵列的长度,我觉得我看到了malloc,但我在这部分上花了超过15个小时,没有任何好处。我想知道是否有人可以给我一个提示。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv) {
char *experiments[100];
int data[10][20];
char name[101];
int i=0;
int j=0;
char *n;
char *g;
fgets(name, 100, stdin);
while ((strstr(name,"*** END ***")!=0)&&(name!=NULL)){
if((i%2)==0){
experiments[i/2]=name;
name[0]='\0';
}
else {
int a = 0;
while ((name[a]!='\n')&&(a<100)){
if (name[a]!=' '){
size_t len = strlen(n);
g = malloc(len + 1 + 1);
strcpy(g,n);
g[strlen(n)-2] = name[a];
g[strlen(n)-1] = '\0';
n[0]='\0';
*n = *g;
free( g );
a+=1;
}
else {
data[j][i]=*n;
j+=1;
n[0]='\0';
a+=1;
}
}
}
i+=1;
fgets(name,100, stdin );
}
int k=0;
for(k=0;k<=i;k+=1){
printf("printing\n");
printf("%s\n", experiments[k]);
if (experiments[k][0]=='\0') {
printf("oh shoot!");
}
}
return(0);}
答案 0 :(得分:0)
您似乎对以下内容存在根本混淆:
for
和return
都不是函数!对于对生活的热爱,如果您希望其他人阅读您的代码,请为他们呈现它!如果您的代码也一直缩进,那将会有所帮助。name!=NULL
无法评估false,因此表达式毫无意义),指针以及experiments[i/2]=name;
中从数组到指针的隐式转换。为了澄清,每次你这样分配时,不同的元素将指向同一个地方,当你下次调用fgets
时,存储在那个地方的值将被覆盖。malloc
;你在错误的地方使用过它,你使用它的方式会重新激活自动存储持续时间(即你所有的变量)。你也可以根本不使用它。fgets
;它的失败模式会导致你的程序崩溃。首先阅读K&amp; R 2E并按照前面提到的那样进行练习......一旦你完成了那本书,我认为你很有可能填补这个课程的空白:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv) {
char *experiments[100] = { 0 };
int data[10][20] = { 0 };
char name[101] = { 0 };
size_t i = 0, j = 0;
fgets(name, sizeof name, stdin);
while (strstr(name,"*** END ***") != 0){
if(i%2 == 0){
experiments[i / 2] = malloc(strlen(name) + 1);
if (experiments[i / 2] == NULL) {
puts("OOPS! malloc failure!");
return 0;
}
strcpy(experiments[i / 2], name);
}
else {
/* XXX: I have no idea what any of this was meant to do *
* ... but it was all HORRIBLY WRONG so I removed it. *
* Try again once you've read K&R 2E and done the *
* exercises... */
}
i++;
fgets(name, sizeof name, stdin);
}
for (size_t k = 0; k < i / 2; k++){
puts("Printing...");
puts(experiments[k]);
if (experiments[k][0] == '\0') {
puts("oh shoot!");
}
free(experiments[k]);
}
return 0;
}