【发布时间】:2018-11-21 16:12:28
【问题描述】:
在这个程序中,我想获得一个输入,其中将是一个带有一些 int 的字符串。如果没有给出任何值,那么程序将只显示总金额。
但是在这里,在第一种情况下,如果我使用带数字的字符串,则有 2 个输出。
示例输入:
4
捐出 100
报告
捐赠500
示例输出:
0
100
100
0
但请注意,我有 3 次输入字符串的机会,但输出是 4 次。 那么,谁能告诉我为什么这个程序表现得很奇怪?
#include<stdio.h>
#include<stdlib.h>
int main()
{
int T, total=0, val=0;
char input1[20];
scanf("%d",&T);
while(T--)
{
scanf(" %s",input1);
val=-1;
val=atoi(input1);
total+=val;
printf("\nInput=\"%s\" val=\"%d\"\n", input1, val);
if(val != -1)
printf("%d\n",total);
}
}
【问题讨论】:
-
scanf(" %s", input1);读取到下一个空格。第一个scanf将读取donate和第二个100。 -
为什么不在
if之前添加一行代码来记录input1中的内容和val中的内容,然后自己弄清楚? -
@mahinhossen 如果你想读取一个字符串直到换行,你应该使用
scanf(" %[^\n]s",input1); -
@mahinhossen 对,所以您确实希望它们分开。您希望能够忽略“捐赠”并处理“100”。如果它们是分开的,那是最容易做到的。如果它们在一起,您只需将它们分开,因为您想以不同的方式处理这两件事。
-
@mahinhossen 您的
scanf很好。如果输入不是数字,您只需要添加代码即可忽略输入。您选择的atoi不是一个好选择,因为它没有错误检测。