我对C编程很陌生,我想知道为什么在使用以下代码时需要输入两次相同的值?
#include <stdio.h>
int main(void)
{
int ascii;
printf("Enter an ASCII value: ");
scanf(" %d\n", &ascii);
printf("The %d ASCII code has the character value %c\n", ascii, ascii);
return 0;
}
您可以看到我必须在下面的图片中输入89
两次。
答案 0 :(得分:3)
您需要2个值,因为 format-string 包含two
格式说明符,例如:
" The %d ASCII code is character '%c'\n\n"
指定two
转换(例如%d
和%c
)。它们每个都需要参数列表中的相应值。 e.g:
printf ("\n The %d ASCII code is character '%c'\n\n", ascii, ascii);
^ ^ 1 2
没有魔力,只需仔细看看man printf
。您只是为相同的值打印两个不同的转换。因此,每次转换都需要自己的价值。
如果您仍然遇到问题,请随时进一步询问。以下是您的代码的简短版本,可以正常工作:
#include <stdio.h>
int main (void) {
int ascii;
printf ("Enter and ASCII code value: ");
if (scanf ("%d%*c", &ascii) != 1) {
fprintf (stderr, "error: invalid value entered.\n");
return 1;
}
printf ("\n The %d ASCII code is character '%c'\n\n", ascii, ascii);
return 0;
}
<强>输出强>
$ ./bin/enterascii
Enter and ASCII code value: 89
The 89 ASCII code is character 'Y'
您的'夸脱'帖子
您未在'\n'
格式字符串中包含scanf
:
scanf(" %d\n", &quarts);
应该是
scanf("%d%*c", &quarts);
(注意: %*c
只会读取并丢弃因按 Enter 键而产生的'\n'
。这不是必需的,但是最好从输入缓冲区(stdin
)中删除它,否则如果您尝试在同一代码中使用后续scanf
调用来获取字符或字符串输入,则会感到惊讶。
答案 1 :(得分:3)
您需要删除\n
模式中的空格(空格和scanf
),即"%d"
而不是" %d\n"
。
#include <stdio.h>
int main(void)
{
int ascii;
printf("Enter an ASCII value: ");
scanf("%d", &ascii);
printf("The %d ASCII code has the character value %c\n", ascii, ascii);
return 0;
}