我有一些代码在 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/