K&R练习2-2的C编程语言:为避免&&或||]循环而重写

问题描述 投票:0回答:2
K&R练习2-2要求我们使用&&或||重新编写以下w / out循环

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

c
2个回答
3
投票
错误的if()逻辑

尝试替换


0
投票
您的方法不起作用,因为如果遇到换行符或EOF而不是终止,它会设置s[i]并递增i
© www.soinside.com 2019 - 2024. All rights reserved.