水中望月 发表于 2018-12-3 14:26:10

字符串输入问题

#include <stdio.h>

int main()
{
      char str1;
      unsigned char str2;

      printf("Input str1:");
      scanf("%s",str1);

      printf("Input str2:");
      scanf("%d", &str2);

      printf("str1 = %s, str2 = %d\n",str1, str2);

      return 0;
}


str1输入一个字符串,str2输入一个整数,最后的输出结果只有输入的str2,输入的str1为空,这个是什么情况?

luckyblyd 发表于 2018-12-3 19:36:31

我把scanf(“%d”,str1);改成int a = scanf(“%d”,str1);正常显示没有问题
后面代码a==0表示scanf获取失败

水中望月 发表于 2018-12-4 09:23:23

luckyblyd 发表于 2018-12-3 19:36
我把scanf(“%d”,str1);改成int a = scanf(“%d”,str1);正常显示没有问题
后面代码a==0表示scanf获取失 ...

#include <stdio.h>

int main()
{
      char str1;
      unsigned char str2;

      printf("Input str1:");
      scanf("%s",str1);

      printf("str1 = %s\n",str1);

      printf("Input str2:");
      scanf("%d", &str2);

      printf("str1 = %s, str2 = %d\n",str1, str2);

      return 0;
}

输入字符串str1后,立即输出是可以输出输入的str1的,输入str2后,再次输出,就没有str1的值了

默尘勇 发表于 2018-12-5 15:11:58

str2整数不应该用char,把char改为int就行了

lemon3 发表于 2018-12-6 15:01:46

cha r是占用一个字节,in t需要4个字节

csilovelxl 发表于 2018-12-6 16:49:39

错误的是str2,为什么受影响的是str1的输出?!

sczj010101 发表于 2018-12-9 20:12:22

str1是一个数组
你写的是scanf("%s",str1);

第一:少了个取地址符号
第二:
数组为30个,想要scanf
应该写成

for(int number = 0; number < 30 ; numbet++)
{
    scanf("%s" , &str1);
}

你那样写只scanf一次

而printf也需要for,才能打印出30个,你那种写法只打印出一个

for(int number = 0; number < 30 ; numbet++)
{
    printf("%s" , str1);
}

sczj010101 发表于 2018-12-9 20:16:12

如果你要字符型就用%s
或者干脆都用int str2;

百里狂生 发表于 2018-12-9 20:28:23

csilovelxl 发表于 2018-12-6 16:49
错误的是str2,为什么受影响的是str1的输出?!

是因为在执行 scanf("%d", &str2);这条语句的时候,程序当掉了,也就是停止运行了,后面的语句也就不会在执行了。
页: [1]
查看完整版本: 字符串输入问题