【发布时间】:2018-05-07 04:16:13
【问题描述】:
看到这个main:
int main(void)
{
int i;
int ch;
char str[512];
fgets(str, sizeof str, stdin);
for (i = 0; i <= (strlen(str)); i++)
{
if (str[i] != '\0' && str[i] != '\n')
{
int num = atoi(&str[i]);
printf("%d\n", num);
}
}
return 0;
}
我想从用户那里获取数字并获取所有没有任何spaces 或tabs 的数字。
例如:
输入1 2 3。
但在这种情况下,这是输出:
1
2
2
3
3
那么为什么我收到了两次2 和3?
【问题讨论】:
-
你如何开发你的代码?你只是在记事本中编辑它吗?为自己准备一个 IDE,例如 Eclipse CDT、NetBeans、MS Visual Studio 等。了解如何设置断点、逐行执行代码、检查变量。你刚刚被教导how to fish :-)
-
您有一个
for循环,出于任何逻辑原因,它尝试处理输入中的每个字符并为其输出一些数字。很明显,对于“1 2 3”,将打印五个数字,因为该字符串中有五个字符不是 nul 或换行符。 -
@Mawg 钓到你不需要拖网渔船:在许多情况下,一根钓鱼竿就足够了(在这个类比中,一个简单的调试器而不是 IDE)。
-
很好,但可视化调试器更简单。而是显示 GDB 的 IDE,只是从命令行运行 GDB
-
你想得到没有空格或制表符的数字,但你没有检查空格或制表符。
标签: c string loops spaces atoi