繁体   English   中英

无法在 C 的单行中将字符串和浮点数作为输入

[英]Not able to take string and float as input in a single line in C

这是问题

我到现在为止就是这个。 我无法弄清楚如何采用上述输入并解决此问题?

#include<stdio.h>
#include <stdlib.h>
#include<float.h>
int main()
{
    char s[50];
    float mil,min=FLT_MAX;
    while(scanf("%s@%f",s,&mil)!=-1)
    {
        printf("%s\n",s);
        if(mil<min)
            min=mil;
    }

}

编辑:我的问题是,当我在循环中打印字符串s时,会打印“Zantro@16.15”,而我只想将“Zantro”存储在s中,而将 16.15 存储在mil

%s向上扫描直到出现空白。 向上扫描直到出现@

while (scanf("%[^@]@%f", s, &mil) == 2)

请记住在扫描格式中指定最大缓冲区大小以防止溢出:

while (scanf("%49[^@]@%f", s, &mil) == 2)

好吧,scanf function 不能轻易确定,您希望@ 符号作为分隔符。 因此,您需要添加一个额外的步骤来将字符串拆分为适当的部分并存储它们以供以后比较。

看看 c 中的 strtok function。 http://www.c-howto.de/tutorial/strings-zeichenketten/string-funktionen/string-zerteilen/

这是打印请求的字符串的解决方案:

#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <string.h>

int main()
{
    char s[50];
    char mins[50];
 
    float mil,min=FLT_MAX;
    int rc;
    int done=0;

    while (done == 0)
    {
        rc = scanf("%49[^@]@%f", s, &mil);
        if (rc != 2) 
        {
          done = 1;
          continue;
        }
        if (mil < min)
        {
            min = mil;
            strcpy(mins, s);
        }
    }
 
   printf("%s\n", mins);

   return 0;
}

执行:

./sc
Zantro@16.15
Zirty@12.5
Gamry@9.8

Gamry
#include<stdio.h>
#include <stdlib.h>
#include<float.h>
int main()
{
    char s[50];
    float mil, min = FLT_MAX;
    while (scanf("%[^@]@%f", s, &mil) == 2)
    {
        printf("%s\n", s);
        if (mil < min)
            min = mil;
    }
}

输入:Zantro@16.15Zity@12.5Gamry@9.8

OutPut:Zantro Zity Gamry

如果要将 scanf 中的输入拆分为字符串和浮点数,则必须分别编写这两种类型。 例如,("%s %f")。 这个字符串告诉 function,什么是 arguments 类型。 因此,如果你这样写(“%s@%f”)scanf function 有一个问题要理解,输入类型是什么。 此外,如果你写 ("%s @%f") 它将得到两个像这样的输入“@”。 您的问题是两个 arguments 之间的空间。 因为,我没有找到如何在没有这个空间的情况下获取输入。 我建议您尝试以另一种方式拆分输入。

例如,取一个字符串来保存字符串 buffer-> scanf("%s",sBuffer) 的 intaier 输入。 然后将其拆分为不同的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM