gpt4 book ai didi

c - 使用 char 和 scanf 以及 for 循环时出现问题?

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:17 27 4
gpt4 key购买 nike

我的问题是使用 char 和 scanf。您可以在下面找到我的代码,它几乎可以正常工作。问题与 for 循环有关。你看,我想向用户询问 10 个字符,并计算字母,但是 for 循环无法正常工作。它不会正确计算输入。例如,如果用户键入 6,没问题,或者 a,也可以,但是如果他键入 10 或 11,则程序认为用户键入了 2 个不同的字符,但实际上用户只键入了一个字符“10”。所以请帮助我并解释为什么 scanf 和 char 不能正常工作。谢谢你!

#include <stdio.h>
#include <stdlib.h>


unsigned int countalpha(void){

printf("Please enter 10 characters:\n");

char b;
int sum = 0;
int i = 0;

for (i = 0; i<10; i++)
{
scanf("%c\n", &b);


if (isalpha(b))
sum = sum +1;
else
sum = sum;

}


return sum;

}

int main()
{
int sum;

sum = countalpha();
printf ("Letters totally: %d", sum);

return 0;
}

最佳答案

scanf() 函数很难正确使用。

scanf() 格式字符串中的尾随空格对于交互式输入来说是非常糟糕的。符号 "%c\n" 表示“读取一个字符;然后跳过后面的空格,直到下一个不是空格的字符,然后才从函数'返回。这很少是你想要的。用户将需要键入一个字符,可能是 a,然后是回车,然后是另一个,然后是一些空格,等等,但是输入不会返回,直到他们沮丧地键入 '你这个愚蠢的程序'(和一个换行符),此时一切突然开始工作,除了他们的评论可能不是对下一个输入的正确响应。或者他们打了中断,再也不会运行你的程序,因为这对他们来说太令人沮丧了。

请注意,scanf() 格式字符串中的任何空白字符都表示“跳过可选空白”,这意味着空白、制表符、换行符(以及各种更晦涩的字符)将被跳过,如果它们是现在,但如果没有空白就没有问题。另请注意,唯一不跳过空格的转换说明符是 %c%[...]%n;所有其他转换说明符会自动跳过空格。

您可能应该使用 "%c"。这意味着“跳过空格,然后返回不是空格的字符”。或者,根据您的代码,您可以简单地使用 "%c",或者甚至更好:

int c;
while ((c = getchar()) != EOF)
{
if (isalpha(c)
sum++;
}

如果您想要面向行的输入,请不要使用scanf()fscanf();使用 fgets()getline() 后接 sscanf()

顺便提一句:

else
sum = sum;

毫无意义。编译器可能会将它们优化掉,但不应强制其他人阅读它们并对您的想法感到困惑。

关于c - 使用 char 和 scanf 以及 for 循环时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27406172/

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