给出以下代码:
#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应该打印 …