C - 在字符串上使用 scanf 获取数字

标签 c string numbers character scanf

我会尽量简短地说明我的问题是什么。 虽然,我是一个初级程序员,所以我真的很抱歉我的愚蠢问题。

我有一个字符串。 我想用 scanf 给这个字符串一个值。 该值甚至可以是单个数字(但我也希望该数字作为字符)。

所以我做了这段代码:

char string[20];
scanf("%s", string);

//LETS ASSUME WE ONLY WRITE THE NUMBER 1 IN THE STRING

if(string=='1')
 printf("You have entered a single number: 1");

// IF I WOULD RUN THIS PROGRAM THE PRINTF PART WOULD NOT HAPPEN. WHY?

这段代码当然只是一个例子。 在我的程序中,我会用 IF 做一些不同于简单 printf 的事情。

尽管在这段代码中,如果我将字符串 1 作为值,然后按回车键,由于某种原因,我在 IF 中编写的内容不会发生。

任何人都可以给我解释一下我应该怎么做才能让它发挥作用吗?那IF部分应该怎么写呢?

最佳答案

使用(小心,因为单引号表示 char 值而不是字符串文字)

#include <string.h>

...

if (strcmp(string, "1") == 0) /* if it returns 0, the string contents are the same for both strings */

...

因为 C 没有直接支持进行字符串比较,您实际上是在比较两个指针(即使它们存储了相同的值,它也不会是与字符串文字相同的指针 "1"string 变量位于计算机内存中的不同位置。

关于C - 在字符串上使用 scanf 获取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40704557/

相关文章:

在 C 中将指针转换回数组

java - 创建一系列四个数字

c# - 在 C# 中将简单数字字符串转换为 Int 时引发格式异常

php - 如何在 php 中格式化带有 00 前缀的数字?

c - 打印字符串的问题

c - uint8_t * const LCDMem = (uint8_t *) &LCDM3;意义

python - 如果向前的前 4 位数字等于向后的最后 4 位数字,则检查数字

java - 使用不同的数组填充数组,但插入的某些值为空

c - 将字符传递给 C 中的函数时出错

c - 如何从带有指针的函数返回数组