好的,我是第一次尝试编程的学生,所以要善待;)这是在屏幕上打印“n”次字符串的正确代码...
#include <stdio.h>
#include <string.h>
#define MAX 80+1+1 /* 80+\n+\0 */
int main(void)
{
char message[MAX];
int i, n;
/* input phase */
printf("Input message: ");
i = 0;
do {
scanf("%c", &message[i]);
} while (message[i++] != '\n');
message[i] = '\0';
printf("Number of repetitions: ");
scanf("%d", &n);
/* output phase */
for (i=0; i<n; i++) {
printf("%s", message);
}
return 0;
}
为什么在do-while形式中他需要检查消息[i ++]!='\ n'而不仅仅是消息[i]!='\ n'??
答案 0 :(得分:3)
在我看来,编写输入循环的正确方法是:
fgets(message, sizeof message, stdin);
换句话说,不要使用逐字符循环,只需使用标准库的函数,该函数读取由换行符终止的字符串并完成。< / p>
答案 1 :(得分:1)
代码中的do { ... } while(...)
循环一次读取一个字符并将其存储在message
中。下一个字符的索引比前一个字符的索引多一个,这就是我们应该在存储当前字符后增加索引变量i
的原因。算法是:
message[i]
。'\n'
,请退出。i
并转到1。表达式message[i++]
在用作i
的索引后递增message
,以便下次我们将查看字符串中的下一个字符。因此,while (message[i++] != '\n')
结合了第2步和第3步。
for
中的相同 - 循环:
int i;
for (i = 0; scanf("%c", &message[i]) && message[i] != '\n'; ++i);
但正如@unwind指出的那样,最好不要使用char-by-char输入。