使用scanf在字符串上输入数字(C语言)

3

我会尽量简短地说明我的问题。 虽然我是一个初学者程序员,但我对自己的问题感到很抱歉。

我有一个字符字符串。 我想使用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'; helper [1] ='\ 0'; 假设用户将数字1作为值赋给字符串,然后执行strcmp(string,helper); 它给我一个1作为结果。但它应该给我一个0,因为两者相等。问题出在哪里? - Noxter
@user3121023,它起作用了!非常感谢您的帮助!祝您有美好的一天! - Noxter
同时告诉 scanf() 可以存储多少个字符到 string 中,以避免潜在的缓冲区溢出:scanf("%19s", string); - chqrlie
1个回答

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"和字符串变量存储在计算机内存的不同位置)。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接