C FGET和阵列:说明
关于下面的C代码,我有两个问题C FGET和阵列:说明,c,C,关于下面的C代码,我有两个问题 代码中的clear()的用途是什么?我想 这样我就可以按enter键“停止”输入11个字符 myarray需要myarray,但我似乎可以为 也成功地执行了scanf调用 fgets是否总是用“\n”关闭缓冲区?如果我放11呢 十个而不是十个?函数如何知道结束 带“\n”的字符 #包括 空白清除() { 而(getchar()!='\n'); } int main(){ int值; 无符号整数秒; char-myarray[11]; printf(“输入1
clear()
的用途是什么?我想
这样我就可以按enter键“停止”输入11个字符
myarray需要myarray
,但我似乎可以为
也成功地执行了scanf
调用fgets
是否总是用“\n”关闭缓冲区?如果我放11呢
十个而不是十个?函数如何知道结束
带“\n”的字符#包括
空白清除()
{
而(getchar()!='\n');
}
int main(){
int值;
无符号整数秒;
char-myarray[11];
printf(“输入10个字符:”);
fgets(myarray,11,标准输入法);
清除();
printf(“输入一个介于-50000和50000之间的整数:”);
scanf(“%d”,和值);
printf(“输入一个介于0和100000之间的无符号整数:”;
scanf(“%ud”、&second);
...
clear()在代码中的作用是什么
clear()
的目的是删除stdin
缓冲区中的所有剩余字符,以防输入的字符串大于11-1
fgets是否总是用“\n”关闭缓冲区?如果我将11
字符而不是10个字符,该怎么办
如果输入流的大小为11
个字符或更大,则不会读取11-1
,不会读取11
个字符及以上字符,在myarray[]中留下一个空格
对于'\0'
空终止符,它们将与'\n'
一样保留在缓冲区中,因此需要清除()
示例:
如果输入的字符串是“qwertyuiopa”
,q w w y u i o p\0
将是您的字符数组,a\n
将保留在stdin
缓冲区中
函数如何知道以“\n”结尾字符
fgets
在读取第11-1
字符后立即停止读取,这是由第二个参数决定的,与字符无关,或者如果找到'\n'
,在这种情况下,所有字符都被读取,包括'\n'
,并将存储在myarray[]
中
示例:
输入“qwerty”
,字符数组将q w e r t y\n\0
,stdin缓冲区将为空
最后一点要注意的是,为了确保完全正确,clear()
函数应该考虑EOF
:
int c;
while((c = getchar()) != '\n' && c != EOF);
混合使用
fgets()
和scanf()
通常是代码不好的标志。建议停止使用scanf()
,直到您理解为什么混合使用它们是不好的。我不理解以下位置:“C标准不要求剩余字符留在缓冲区中”.fgets
是一个,因此它将fgetc
从输入流中检索一个字符并前进流位置指示器。这似乎会使输入流中的字符保持不变;文本流允许一些更改,但这似乎不能证明“未被强制保留在缓冲区中”是正确的你是说该标准允许IO流中的字符自动消失吗?Hmmm:建议“第11个字符替换为'\0'
”-->“永远不会读取第11个字符,在myarray[]
中为'\0'
留出空间。”@exnihilo这意味着我在标准中找不到任何东西。fgets要求我不要简单地读取流中的所有字符,例如,丢弃所有多余的字符,让缓冲区为空,你的链接澄清了这一点,我没有给予足够的重视。你的建议是一个明显的改进,我很高兴接受,ty。这是对文本流可能与fgets()最相关:
int c;
while((c = getchar()) != '\n' && c != EOF);