我目前有家庭作业,我用了gets
。教授说我应该改用getchar
。
有什么区别?
我将如何更改我的代码以使用getchar
?我似乎做不好。
法典:
#include <stdio.h>
#include <string.h>
#include <strings.h>
#define STORAGE 255
int main() {
int c;
char s[STORAGE];
for(;;) {
(void) printf("n=%d, s=[%s]n", c = getword(s), s);
if (c == -1) break;
}
}
int getword(char *w) {
char str[255];
int i = 0;
int charCount = 0;
printf("enter your sentence:n"); //user input
gets(str);
for(i = 0; str[i] != ' ' && str[i] !=EOF; i++){
if(str[i] != ' '){
charCount++;
} else {
str[i] = ' '; //Terminate str
i = -1; //idk what this is even doing?
break; //Break out of the for-loop
}
}
printf("your string: '%s' contains %d of lettersn", str, charCount); //output
strcpy(w, str);
// return charCount;
return strlen(w); //not sure what i should be returning.... they both work
}
gets()
应该从输入中获取一个字符串并将其存储到提供的参数中。但是,由于缺乏对输入长度的初步验证,它容易受到缓冲区溢出的影响。
更好的选择是 fgets()
.
但是,谈到getchar()
部分的使用,它一次读取一个char
。所以基本上,你必须使用循环不断地从标准输入中读取一个接一个,直到你到达一个换行符(或EOF),这标志着预期输入的结束。
当您读取字符(具有可选验证)时,您可以继续将它们存储在str
中,以便在输入循环结束时,您可以在str
中准备好输入字符串。
不要忘记空终止str
,以防万一。