有两个函数可以逐字符读取字符串。问题在于结果的不同细微差别。无论使用 while 循环的循环在输入新行字符后是否丢弃更多字符,for 循环的第二个循环都会停止在数组中保存字符 when ' ' 但不知何故,如果再次请求此功能,它会直接打印上一次留下的字符,然后您甚至可以自己输入。
您可以通过更改功能来尝试该程序,并检查输出的差异是否明显,但我不明白。
#include <stdio.h>
#include <ctype.h>
int read_lineD_Solution(char str[], int n);
int read_line(char str[], int n);
int main(void)
{
char a[100] ;
printf("Enter a sentece: ");
read_lineD_Solution(a, 3);
printf("%s\n", a);
printf("Enter a sentece: ");
read_lineD_Solution(a, 3);
printf("%s\n", a);
return 0;
}
int read_line(char str[], int n)
{
int ch, i=0;
while ((ch=getchar()) != '\n')
if (i < n)
str[i++] = ch;
str[i] = '\0';
return i;
}
int read_lineD_Solution(char str[], int n)
{
int ch, i;
for (i=0;i<n; i++) {
ch = getchar();
if (ch == '\n')
break;
str[i] = ch;
}
str[i] = '\0';
return i;
}
我尝试将 while 循环更改为“for”循环,反之亦然。我还改变了条件的顺序。这两种方法都为我提供了类似的输出,但具有意外的行为。
read_line()
读至行尾。
read_lineD_Solution()
读取到 n
字符行的末尾,以先到者为准。
read_lineD_Solution()
有一个错误:当读取n
字符时,str[i] = '\0';
写入过去的缓冲区。
两者都不能很好地处理
getchar()
返回 EOF
,这应该结束读取。