特别是在while循环
getchar()函数的变量是什么?如果是' s'在哪里表达?
这个功能有用吗?我看到各种各样的问题"阅读"函数如gets(),fgets()或scanf()。这个会像其他人一样给出问题吗?
char * mygets(char *s) {
int i = 0, ch;
while ((ch = getchar()) != '\n')
s[i++] = ch;
s[i] = '\0';
return s;
}
main() {
char input[21];
printf("type anything:\n");
mygets(input);
printf("output: %s\n", input);
}
答案 0 :(得分:0)
1)getchar()获取一个字符,因为它被键入....所以它'等待'你键入...键盘上的一个字符..
2)这是一个基本功能,有更多优化和高级功能可以用角色来做这些事情......但是如果你想要正确编码,理解这里发生的事情是非常重要的。
干杯...
答案 1 :(得分:0)
当您使用getchar(3)或gets(3)函数时,正在从过程标准输入中读取输入。
getchar()函数等同于getc(stdin)。
由于获取一次读取一个字符,因此您需要计算读取的字符数,并确保您不会离开可用空间的末尾'。这意味着你需要通过'尺寸'的。
char*
mygets(char *s) {
//is s a valid pointer to memory?
//how much space is available in s?
int i = 0, ch;
//what is the maximum value of an int?
//what happens when i++ exceeds MAX_INT?
//does -1 make sense?
//getchar(3) can return EOF
while ((ch = getchar()) != '\n')
s[i++] = ch;
s[i] = '\0';
return s;
}
尝试这样的事情。对读取的字符进行计数,检查是否没有在传递的缓冲区的末尾运行,并且
char*
mygets(char* s, const size_t size) {
if( !s ) return s; //error, null pointer passed
size_t count=0;
char* sp = s;
int ch;
for( ; (count<size) && ((ch = getchar()) != EOF); ) {
++count; //count each character read, but not EOF
if( (*sp++ = ch) == '\n' ) break; //store characters read, check for newline
}
*sp = '\0'; //null terminate s
return s;
}
您应该只传递大小的合理值和s的合理值(的有效字符缓冲区至少大小)。用法示例:
char buffer[999];
mygets(buffer, 999); //or mygets(buffer, sizeof(buffer));