c - 为什么数字 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, 0, 10); // error checking missing
for (; number > 0; number--) {
printf("Give a char: ");
fgets(buffer, sizeof 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;
}
推荐阅读
- python - 在 csv 行中查找匹配项并进一步处理
- visual-studio-code - 如何将差异内联装饰器添加到类似于 VSCode 的摩纳哥?
- r - ComplexHeatmap 包中的切片顺序
- json - 对象不是空的,但它说它是未定义的
- unity3d - Unity:即使在播放器设置中未选中 x86 后,此版本也不符合 Google Play 64 位要求错误
- c# - C#外键无法将对象添加到对象列表中
- reactjs - 如何在 React 中进行参数传递
- python - 在 SQL 到 Python 中挑选出两个日期之间具有相同时间的行
- javascript - 使用 php 将数组转换为 json ,并使用 jquery 或 javascript 检索 json
- android - 从字符串中删除 Unicode 替换字符