【问题标题】:why input isn't being taken as i wanted?为什么没有按我的意愿输入?
【发布时间】: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 不是一个好选择,因为它没有错误检测。

标签: c string input


【解决方案1】:

只需添加日志,答案就显而易见了:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int T, total=0, val=-1;
    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);

    }
}

然后运行它并给它你的输入:

4
donate 100

Input='donate' val='0'
0

Input='100' val='100'
100
report

Input='report' val='0'
100
donate 500

Input='donate' val='0'
100

如您所见,如果没有给atoi 提供数字,您期望以某种方式在val 中获得-1 值是不正确的。

【讨论】:

    猜你喜欢
    • 2022-07-22
    • 1970-01-01
    • 2023-03-04
    • 2021-02-26
    • 2021-12-02
    • 1970-01-01
    • 2021-11-28
    • 2014-02-10
    • 2021-08-16
    相关资源
    最近更新 更多