c - 从字符串中获取整数

标签 c while-loop scanf c-strings conversion-specifier

我有一些代码在 while 循环中读取 name 1 形式的字符串,然后我必须提取整数值以打印 yes 或 no。但是当我尝试使用 sscanf 执行此操作时,它仅在循环完成后才为目标整数提供值。

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

int main() {
    char a[20];
    int p = 0;
    while (scanf("%s", a)) {
        sscanf(a, "%d", &p);
        if (p != 0) {
            printf("yes");
        } else {
            printf("no");
        }
    }
    return 0;
}

即使我引入的字符串具有大于1的整数,程序总是打印no

我尝试使用 printfs 评估输出,我发现当我执行时它会给出以下输出:

printf("%d", p);

对于输入:

name 1

它打印:

0no1yes

正如我所说,它首先获取整数为 0,输入 if 后,它变为 1

最佳答案

scanf 调用中

while(scanf("%s",a)) {

转换说明符s 允许仅读取由空格分隔的文本。也就是说,如果您输入

name 1

那么 scanf 的第一次调用将仅读取文本 "name",并且在循环的下一次迭代中调用 scanf将读取确实可以转换为整数的文本“1”

您需要在 scanf 调用中使用另一个转换说明符。

以及while循环中的条件

while(scanf("%s",a)) {

事实上,你有一个无限循环。

您的程序还包含冗余的 include 指令。

该程序可以如下所示。

#include <stdio.h>

int main( void ) 
{
    char a[20];

    while ( scanf(" %19[^\n]",a ) == 1 ) 
    {
        int p = 0;

        sscanf( a,"%*s%d", &p );

        if ( p ) 
        {
            puts( "yes" );
        }
        else 
        {
            puts( "no" );
        }
    }

    return 0;
}

关于c - 从字符串中获取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75953571/

相关文章:

c - VC++ 中的 "already defined "错误

android - 奇怪的while循环行为

c++ - while 循环内部具有相同条件的 if 语句?

C程序导致控制台黑屏

c - 在C中是否可以输入某种变量并同时将其与另一个变量进行比较?

C - 如何让 fscanf() 确定它读取的是否只有数字,没有字符

c - 在 C 中使用 getch() 时,当没有当前窗口错误时尝试绘制操作

c - 仅在 debian 中覆盖我的应用程序的系统调用

python - 如何使 socket.recv(500) 不停止 while 循环

c - 在 C 中丢弃数十和数百列的 int