如何解决为什么数字10在每次迭代中都得到输出,我该如何解决?
我有一个for循环,我想从用户那里获取输入并打印关联的ascii值。但是它只在第二次迭代中要求用户输入,第二次迭代之后是输出10。我试图摆脱换行符,但仍然打印出10。
#include <stdio.h>
int main(void){
int number;
printf("Enter the number:");
scanf("%i",&number);
for( ; number > 0; number--){
char character;
printf("Give a char: \n");
scanf("%c",&character);
printf("The associated ascii value is %i \n",character);
}
return 0;
}
解决方法
也许更简单(尽管不建议使用scanf()
作为用户输入)
scanf(" %c",&character);
// ^ skip otional leading whitespace
您使用fgets()
作为用户输入的整个程序(以及我的缩进,间距,样式;抱歉)
#include <stdio.h> // printf(),fgets()
#include <stdlib.h> // strtol()
int main(void) {
int number;
char buffer[100]; // space enough
printf("Enter the number:");
fgets(buffer,sizeof buffer,stdin);
number = strtol(buffer,10); // error checking missing
for (; number > 0; number--) {
printf("Give a char: ");
fgets(buffer,stdin); // reuse buffer,error checking missing
if (buffer[0] != '\n') {
printf("The associated ascii value of '%c' is %i.\n",*buffer,*buffer);
}
}
return 0;
}
,
这应该可以解决您的问题。 getchar()
将从缓冲区读取多余的换行符。
#include <stdio.h>
int main(void){
int number;
printf("Enter the number:");
scanf("%i",&number);
for( ; number > 0; number--){
char character;
printf("Give a char: ");
getchar();
scanf("%c",&character);
printf("The associated ascii value is %i \n",character);
}
return 0;
}
,
关于;
scanf("%c",&character);
第一次通过循环输入“ \ n”。
在随后的所有循环中,scanf()
失败,因此character
中的值不变。
这是为什么您的代码应进行错误检查的主要示例。
例如,要错误检查对scanf()
的调用:
if( scanf("%c",&character) != 1 )
{
fprintf( stderr,"scanf for a character failed\n" );
break;
}
1
是因为scanf()
函数家族返回成功的次数:input format conversion specifiers
或EOF,因此最好确保“正”状态。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。