for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; i++)
s[i] = c;
首先想到的只是使用一些if语句。请注意,该代码只是使用getchar()获取用户输入并将其输出为完整的句子。
#include <stdio.h> #define MAXLINE 1000 int main() { char s[MAXLINE]; int lim = MAXLINE; int i, c; for (i = 0; i < lim-1;) { c = getchar(); if (c != '\n') { s[i] = c; i++; } else if (c != EOF) { s[i] = c; i++; } else { s[i] = '\0'; } } printf("%s\n", s); }
[当我执行此操作时,它起作用了,但是我得到了一堆?在终端中,我认为它们与我指定的其余数组大小有关(注意:使用1000的数组是基于K&R示例的)。我认为在else上添加'\ 0'只会更改char数组以匹配句子的大小。我得到的输出是:
Alexanders-MacBook-Air:coding alexanderroan$ clang exercise2-2.c Alexanders-MacBook-Air:coding alexanderroan$ ./a.out this is a test ^D this is a test ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Alexanders-MacBook-Air:coding alexanderroan$
有关如何调整此设置的任何建议?
K&R练习2-2要求我们使用&&或||重新编写以下w / out循环for(i = 0; i
if()
逻辑尝试替换
s[i]
并递增i
,