给出以下代码:
#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作为新行。为什么?
谢谢您的帮助。
我最近正在研究工会,即使在阅读了很多相关内容之后也会感到困惑.
#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)
我的理解是:
由于x和arr[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应该打印 …