【问题标题】:Output is `blank` space for the normal input on my C code输出是我的 C 代码中正常输入的“空白”空间
【发布时间】:2018-11-20 08:15:11
【问题描述】:
#include <stdio.h>

int main(void) {
  char str[100];
  scanf("%s", str[0]);
  printf("%c", str[1]);

  return 0;
}

我正在运行此代码。我已输入“Jagrit”作为输入。我希望上述程序的输出是'j'。但相反,我没有得到任何输出,只是一个空格。谁能告诉我为什么会这样以及代码中的错误是什么?

【问题讨论】:

  • C 与 C++ 不同
  • 你想用scanf("%s","jagrit dolir");实现什么?
  • scanf 从标准输入读取!
  • 说真的,RTFM。
  • 根据答案修改问题不是一件好事,因为其他用户是根据您的初始问题回答的。

标签: c


【解决方案1】:

当您使用 str[0] 时,您可以访问它的值,因此 scanf 应该像 scanf("%s",&amp;str[0]); 或像这样 scanf("%s",str); 您还应该期望输出为“a”

【讨论】:

    【解决方案2】:

    如果您只想将输入作为字符串,可以使用 fgets() 并且只需使用 str[0] 打印字符串的第一个字符 注意 printf() 仅用于打印值; 这是代码的简单版本:

    #include <stdio.h>
    # include<stdlib.h>
    
    int main() {
        char str[100];
        fgets(str,100,stdin);
        printf("%c",str[0]);
    
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      这个

      scanf("%s","jagrit dolir");/*it doesn't put data into str, and doing that causes UB*/
      

      因此访问str[0] 可能会导致未定义的行为,因为str 没有初始化并且它没有任何数据。

      改为使用如下。

      scanf("%s",str);/* now give input like  jagrit dolir */
      

      然后打印str[0]

      Edit :- 因为您修改了代码。你看过scanf()的手册页吗?

      scanf("%s",str[0]);/* why you are not reading compiler warning here ?*/

      这里%s 需要char* 的参数,但您提供了char 类型。

      【讨论】:

      • 我觉得 OP 甚至在这里都在调用 UB:scanf("%s","jagrit dolir");
      • 是的@babon 同意。
      【解决方案4】:

      scanf 期望内存地址写入读取数据到:

      #include <stdio.h>
      int main(void) {
           char str[100]; 
           scanf("%s", str); 
           printf("%c",str[0]); 
           return 0; 
      }
      

      scanf 上查看this doc 的示例部分。

      您对scanf("%s", "jargrit dolir") 的意图是什么?

      【讨论】:

        【解决方案5】:

        试试这个代码

        #include <stdio.h>
        
        int main()
        {
            char str[100];
            printf("%s","jagrit dolir");
            printf("%c",str[0]);        
            return 0;
        }
        

        【讨论】:

        • 为什么这会更好?你做了什么改变,为什么?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多