gpt4 book ai didi

c - 使用 scanf 进行字符输入,但 do-while 循环不会在空字符处停止

转载 作者:太空狗 更新时间:2023-10-29 15:25:34 29 4
gpt4 key购买 nike

我是编程新手(大学第一学期),跟不上我的讲师。目前我坚持这个练习(比我愿意承认的时间要长得多)。我试图在 Internet 上(在本网站和其他网站上)寻求帮助,但我不能,因为我们的讲师让我们使用一种非常简单的 c 形式。我不一定要完整的答案。我真的很感激一些关于我在哪里出错的提示。我知道这对某些人来说可能真的很简单,这个问题可能看起来无知或愚蠢,我为没有弄清楚问题而感到难过,但我需要尝试去理解。

所以,我想做的是使用 scanf 和一个 do while 循环,这样用户就可以在数组中输入字符。但我不明白为什么当用户按下 ENTER 时循环不会停止。代码还有更多内容,但我正在尝试一步一步慢慢来。 (我不允许使用指针和 getchar 等)。

#include <stdio.h>
main()
{
char a[50];
int i;

printf("Give max 50 characters\n");

i=0;

do
{
scanf("%c", &a[i]);
i=i+1;
}
while((i<=50) && (a[i-1]!='\0'));

for(i=0; i<50; i++)
printf("%c", a[i]);
}

最佳答案

这里没有任何以 nul 结尾的字符串,只有字符串数组。

因此,当按下回车键时,a[i-1]\n不是\0 ( scanf%c 作为参数不会以 nul 终止字符串,并且 ENTER 只是一个代码为 10 又名 \n 的非 nul 字符)

然后不要打印字符串的其余部分,因为你会得到垃圾,只需重复使用 i打印回字符串时:

#include <stdio.h>
main()
{
char a[50];
int i;

printf("Give max 50 characters\n");

i=0;

do
{
scanf("%c", &a[i]);
i=i+1;
}
while((i<sizeof(a)) && (a[i-1]!='\n')); // \n not \0
int j;
for(j=0; j<i; j++) // stop at i
printf("%c", a[j]); // output is flushed when \n is printed
}

同时使用 i<50 进行测试不是i<=50因为a[50]在数组边界之外(我已经概括为 sizeof(a) )

关于c - 使用 scanf 进行字符输入,但 do-while 循环不会在空字符处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48096299/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com