|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
现在再看 Cprimerplus ,第 11 章的练习 3 题目是: 设计并测试一个函数,从一行输入中把一个单词读入一个数组中,并丢弃输入行中的其余字符。该函数应该跳过第 1 个非空白字符前面的所有空白。将一个单词定义为没有空白、制表符或换行符的字符序列。 我写了一版:
- #define LIM 81
- #include <ctype.h>
- #include <stdio.h>
- void getnchar(char *str);
- void test11_13_03()
- {
- char str[LIM];
- puts("Please Enter your String:");
- getnchar(str);
- printf("This String is :-----%s\n", str);
- }
- void getnchar(char *str)
- {
- int c, index = 0;
- while ((c = getchar()) != EOF && isspace(c))
- {
- }
- while (!isspace(c))
- {
- str[index++] = c;
- c = getchar();
- }
- str[index] = '\0';
- }
复制代码
然后我从 ChatGPT 问了一下,它是这么做的:
- #include <stdio.h>
- #include <ctype.h>
- #define LEN 10
- char *getword(char *str);
- int main() {
- char word[LEN];
- printf("Please enter a word (EOF to quit):\n");
- while (getword(word) != NULL) {
- printf("Result: %s\n", word);
- printf("You can enter a word again (EOF to quit):\n");
- }
- printf("Done.\n");
- return 0;
- }
- char *getword(char *str) {
- int ch, n = 0;
- char *pt = str;
- while ((ch = getchar()) != EOF && isspace(ch)) {
- }
- if (ch == EOF) {
- return NULL;
- }
- *str++ = ch;
- n++;
- while ((ch = getchar()) != EOF && !isspace(ch) && n < LEN - 1) {
- *str++ = ch;
- n++;
- }
- *str = '\0';
- if (ch != EOF) {
- while (getchar() != '\n') {
- }
- }
- return ch == EOF ? NULL : pt;
- }
复制代码
这段代码中
- if (ch == EOF) {
- return NULL;
- }
- *str++ = ch;
- n++;
- while ((ch = getchar()) != EOF && !isspace(ch) && n < LEN - 1) {
复制代码
我没看明白这咕噜:
为啥 str 不在 while 循环中,但是可以持续自增而不是自增 1 次就结束了 为了 GPT 半天,它也答不出来个所以然,大概就是因为所以自有道理的回答 |
|