小编San*_*ire的帖子

fgets() 在 C 中无法按预期工作

给出以下代码:

#include <stdio.h>
int main()
{
 int testcase;
 char arr[30];
 int f,F,m;
 scanf("%d",&testcase);
 while(testcase--)
 {
  printf("Enter the string\n"); 
  fgets(arr,20,stdin);
  printf("Enter a character\n");
  F=getchar();
  while((f=getchar())!=EOF && f!='\n')
    ;
  putchar(F);
  printf("\n");
  printf("Enter a number\n");
  scanf("%d",&m);
 }
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望用户输入一个字符串、一个字符和一个数字,直到测试用例变为零。

我的疑虑/疑问:

1.用户无法输入字符串。看来fgets不行。为什么?

2.如果我使用scanf而不是fgets,则getchar无法正常工作,即我在其中输入的任何字符都putchar作为新行。为什么?

谢谢您的帮助。

c

3
推荐指数
1
解决办法
4893
查看次数

C中联合的内存分配

我最近正在研究工会,即使在阅读了很多相关内容之后也会感到困惑.

#include<stdio.h> 
union test
{
    int x;
    char arr[4];
    int y;
};

int main()
{
    union test t;
    t.x = 0;
    t.arr[1] = 'G';
    printf("%s\n", t.arr);
    printf("%d\n",t.x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的理解是:

由于xarr[4]共享相同的内存,当我们设置时x = 0,arr的所有字符都被设置为0.0是ASCII值'\0'.当我们做" t.arr[1] = 'G'"时,arr[]变成" \0G\0\0".当我们使用print打印字符串时"%s",printf函数从第一个字符开始并保持打印直到找到\0.由于第一个字符本身是\0,所以没有打印.

我没有得到的是第二份printf声明

现在,因为arr[]是" \0G\0\0",相同的位置与x和共享y.所以我认为x是以下几点

00000000 01000111 00000000 00000000(" \0G\0\0")

所以tx应该打印 …

c arrays unions

2
推荐指数
1
解决办法
2019
查看次数

标签 统计

c ×2

arrays ×1

unions ×1