1613551
发表于 2022-6-17 11:25:44
wp231957 发表于 2022-6-16 18:35
一般cmd或者powershell都是默认936
也就是gbk是一个东西
换成其他的编码,连printf都实现不了了,直接所有中文都是乱码
1613551
发表于 2022-6-17 11:27:12
我用devc++没有问题
1613551
发表于 2022-6-17 11:30:29
好像找到解决办法了,有人知道这样怎么弄不,文件的编码要怎么弄啊
wp231957
发表于 2022-6-17 11:36:03
1613551 发表于 2022-6-17 11:30
好像找到解决办法了,有人知道这样怎么弄不,文件的编码要怎么弄啊
12楼右下角,我给你标红色那里
1613551
发表于 2022-6-17 11:43:59
wp231957 发表于 2022-6-17 11:36
12楼右下角,我给你标红色那里
我刚刚试了,终端和文件都改成2312了,可是直接连printf都乱码了
1613551
发表于 2022-6-17 11:45:11
就直接这样了
1613551
发表于 2022-6-17 11:54:51
{:10_266:}没人知道为啥了吗
wp231957
发表于 2022-6-17 12:01:07
1613551 发表于 2022-6-17 11:54
没人知道为啥了吗
①我不知道你是咋弄的,所以也没法说原因
②你这个问题不是一个问题
1613551
发表于 2022-6-17 12:08:23
wp231957 发表于 2022-6-17 12:01
①我不知道你是咋弄的,所以也没法说原因
②你这个问题不是一个问题
大佬可以qq远程操作一下吗
1187520285
发表于 2022-6-17 16:39:27
这个应该是关于缓冲区的问题,你的每一个空格都在缓冲区里,把你的ch改成int类型就可以了,因为getchar()返回值就是int类型
1613551
发表于 2022-6-17 16:59:35
1187520285 发表于 2022-6-17 16:39
这个应该是关于缓冲区的问题,你的每一个空格都在缓冲区里,把你的ch改成int类型就可以了,因为getchar()返 ...
我用dev c++可以诶,同样的内容在vscode上面不行
桃花飞舞
发表于 2022-6-18 01:41:37
本帖最后由 桃花飞舞 于 2022-6-18 01:49 编辑
感觉二级指针比较复杂,但是又没想到好的方法,不过像这个如果不用每次都询问要不要输入而用固定输入的个数倒是可以不用二级指针来做。
我觉得下面的方法思路更清晰不至于太难理解。其实就是链表的创建和遍历。
看我代码吧
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
struct BOOK
{
char title;//数据域 书名
char author; //数据域 作者
struct BOOK *next; //指针域 (指向下一BOOK)
};
void getinput(struct BOOK *book) //获取输入
{
printf("请输入书名: ");
scanf("%s", book->title);
printf("请输入作者: ");
scanf("%s", book->author);
}
struct BOOK* addBook()
{
//1.需要三个指针
//2.节点的链接
struct BOOK *head = NULL;
struct BOOK *last = NULL;
struct BOOK *pNew = NULL;
int n;
int i;
printf("请输入要录入信息的个数:\n");
scanf("%d",&n);
for(i=0;i<n; i++)
{
pNew = (struct BOOK *)malloc(sizeof(struct BOOK));
printf("请输入第%d本书的书名和作者: ",i+1);
scanf("%s %s",pNew->title,pNew->author);
if(i == 0)
{
head = last = pNew;
}
else
{
last->next = pNew;
last = pNew;
}
last->next = NULL;
}
return head;
}
void print(struct BOOK *book) //打印链表每个BOOK的信息(与添加的顺序相反) 遍历
{
//struct BOOK *book;
int count = 1; //计数
// book = library;
while (book != NULL)
{
printf("Book %d: \n", count);
printf("书名: %s\n", book->title);
printf("作者: %s\n", book->author);
book = book->next;
// count++;
}
}
void freelibrary(struct BOOK *library) //这个函数有问题,已经修改过了
{
struct BOOK *temp;
while (library != NULL)
{
temp = library->next;
free(library);
// library = library->next; //问题就在这,上面library已经被free了怎么还能访问library->next呢
library = temp;
}
}
int main(void)
{
printf("\n汉字\n");
struct BOOK *library = NULL; //链表头指针,它里面保存的是第一个Book的地址
library = addBook();
print(library);
return 0;
}
念清浅
发表于 2022-6-18 16:16:05
我的也是一样的其他正常,中文输入,然后输出的时候啥都没有。把文件重新用gbk打开,把终端设置回原来的gbk,在单独试一下scanf,就正常。
1613551
发表于 2022-6-18 16:23:04
念清浅 发表于 2022-6-18 16:16
我的也是一样的其他正常,中文输入,然后输出的时候啥都没有。把文件重新用gbk打开,把终端设置回原来的gbk ...
{:10_266:}那你怎么弄啊,不输入中文吗?我弄了两天了也没弄好,愁死我了
念清浅
发表于 2022-6-18 16:38:17
我暂时也不知道,我觉得如果你要用中文输入的话,可以先把他们都调回gbk,就可以了。
念清浅
发表于 2022-6-18 16:42:02
我有看到 :vs2019 因为控制台程序的cin输入的是多字节字符集(多字节的意思是:对于英文ASCII可表示的字符占用1个字节,中文字符占据2个字节)GBK,所以显示要用936 GBK显示。
可能vscode也是吧。输入中文要gbk或者宽字符啥的。
1613551
发表于 2022-6-18 16:55:32
念清浅 发表于 2022-6-18 16:42
我有看到 :vs2019 因为控制台程序的cin输入的是多字节字符集(多字节的意思是:对于英文ASCII可表示的字符 ...
我换了其他编码了,没效果,痛,实在太疼了
1613551
发表于 2022-6-18 20:23:13
wp231957 发表于 2022-6-16 17:52
你是用的vscode吧,这东西默认编码方式一律是utf8
但是gcc默认一般都是ansi也就是我们国家的gbk
.所 ...
已经解决了
1613551
发表于 2022-6-18 20:25:20
念清浅 发表于 2022-6-18 16:42
我有看到 :vs2019 因为控制台程序的cin输入的是多字节字符集(多字节的意思是:对于英文ASCII可表示的字符 ...
已经解决了
念清浅
发表于 2022-6-18 21:21:32
1613551 发表于 2022-6-18 20:25
已经解决了
你最后咋解决的