我一直在尝试在命令外壳中编写用户给出的单词,但是由于某种原因,我的程序在read()函数后立即退出,因此main()中的文本:“在main2 \ n”中甚至书面。我一直在寻找问题大约一个小时,但似乎找不到它。
# include <stdio.h>
void write_zin(const char* zin,int length_zin){
const char * runner =zin;
printf("out of loop\n");
while(runner!=(runner+length_zin)){
printf("%c",*runner);
runner++;
}
}
void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS){
int i ;
char woord[NUMBER_LETTERS+1];
zin[0]='\0';
for(i =0;i<NUMBER_WORDS;i++){
printf("Give a word with %i letters\n",NUMBER_LETTERS);
scanf("%s",woord);
strcat(zin,woord);
strcat(zin,'\0');
}
strcat(zin,'\0');
}
int main(){
const int NUMBER_LETTERS = 5;
const int NUMBER_WORDS = 2;
char zin[(NUMBER_LETTERS+1)*NUMBER_WORDS];
printf("in main 1\n");
read(zin,NUMBER_LETTERS,NUMBER_WORDS);
printf("in main 2\n");
write_zin(zin,(NUMBER_LETTERS+1)*NUMBER_WORDS);
printf("in main3\n");
return 0;
}
最佳答案
您的代码中有几个错误:
功能void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS)
如果将用'\0'
分隔的单词连接起来,则最终将只有一个字符串,因为每个字符串函数都将在第一个'\0'
处停止,并且不再处理其他字符。因此,您不能使用strcat(zin,'\0');
如果要标记字符串之间的分隔,请使用另一个特殊字符作为'\n'
最终功能将是:
void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS){
int i ;
char woord[NUMBER_LETTERS+1];
for(i =0;i<NUMBER_WORDS;i++){
printf("Give a word with %i letters\n",NUMBER_LETTERS);
scanf("%s",woord);
strcat(zin,woord);
}
}
2.功能
void write_zin(const char* zin,int length_zin)
您永远无法在循环内更改循环的条件。那就是您正在做的事情,因为跑步者总是在循环内变化,而且这也是您状况的一部分。
while(runner!=(runner+length_zin)){
printf("%c",*runner);
runner++;
}
最后的功能是:
void write_zin(const char* zin,int length_zin){
const char * runner =zin;
printf("out of loop");
while(*runner){
printf("'%c'",*runner);
runner++;
}
}
关于c - 为什么我的写方法没有初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24886693/