gpt4 book ai didi

c - 为什么我的 write 方法没有初始化?

转载 作者:行者123 更新时间:2023-11-30 20:14:44 25 4
gpt4 key购买 nike

我一直在尝试在命令 shell 中编写用户给出的单词,但由于某种原因,我的程序在 read() 函数后立即退出,因此 main() 中的文本:“in 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;
}

最佳答案

您的代码中有几个错误:

  1. 功能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)您永远无法更改循环内循环的条件。这就是您正在做的事情,因为 runner 总是在循环内发生变化,而且它是您的条件的一部分。

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 - 为什么我的 write 方法没有初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24886693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com