【问题标题】:C - Using scanf on a string to get in a numberC - 在字符串上使用 scanf 获取数字
【发布时间】:2017-04-03 22:14:09
【问题描述】:

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

我有一个字符串。 我想用 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部分呢?

【问题讨论】:

  • @user3121023 嘿!我尝试过这个。我想我现在有绳子了。但我不明白一些事情。我尝试这样做:创建了一个新字符串,以便我可以使用 strcmp,-> char helper[20];然后做了这个: helper[0]='1';助手[1]='\0';假设用户给字符串数字 1 作为值,然后执行 strcmp(string,helper);结果它给了我一个1。但它应该给我一个 0,因为两者是相等的。有什么问题?
  • @user3121023 成功了!非常感谢你帮助我!祝你有美好的一天!
  • 还告诉scanf() 可以存储多少个字符到string 以防止潜在的缓冲区溢出:scanf("%19s", string);

标签: c string numbers character scanf


【解决方案1】:

使用(注意单引号表示char 值而不是字符串文字)

#include <string.h>

...

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

...

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

【讨论】:

    猜你喜欢
    • 2021-02-27
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多