鱼C论坛

 找回密码
 立即注册
查看: 1717|回复: 13

[已解决]怎麼連續讓使用者輸入字串

[复制链接]
发表于 2022-5-22 21:38:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
比如
#include <stdio.h>
int main()
{
        char *a;
        scanf("%s", a);
        printf("%s\n", a);
        fflush(stdin);
        char *b;
        scanf("%s", b);
        printf("%s\n", b);
        return 0;
}
#include <stdio.h>
int main()
{
        char *a;
        gets(a);
        fflush(stdin);
        char *b;
        scanf("%s", b);
        puts(a);
        printf("\n");
        puts(b);
        return 0;
}
int main()
{
        char *a;
        gets(a);
        fflush(stdin);
        char *b;
        gets(b);
        puts(a);
        printf("\n");
        puts(b);
        return 0;
}
不是用fflush(stdin);嗎
目前只學過這個,不過發現好像只能用在字元,像下面這樣就可以正常運作
#include <stdio.h>
int main()
{
        char a;
        scanf("%c", &a);
        printf("%c\n", a);
        fflush(stdin);
        char b;
        scanf("%c", &b);
        printf("%c\n", b);
        return 0;
}
最佳答案
2022-5-23 09:51:13
一隻太平洋睡鯊 发表于 2022-5-23 09:48
唉?
為什麼用
char a[1024]的方式就可以

不管你用什么方式,只要有足够的内存可用就行
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        char *a = malloc(1024);
        scanf("%s", a);
        printf("%s\n", a);
        //fflush(stdin);
        char *b = malloc(1024);
        scanf("%s", b);
        printf("%s\n", b);
        free(b);
        free(a);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-22 22:23:50 | 显示全部楼层
本帖最后由 jackz007 于 2022-5-22 22:29 编辑

         如果始终通过 scanf() 或者不通过 scanf() 函数获取键盘输入,都没有必要使用 fflush(stdin),只有在调用过 scanf() 后,需要换用 getchar()  、gets() 等函数获得键盘输入时,才是有必要的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-23 07:35:48 | 显示全部楼层
指针指向的地址不可用
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        char *a = malloc(1024);
        scanf("%s", a);
        printf("%s\n", a);
        //fflush(stdin);
        char *b = malloc(1024);
        scanf("%s", b);
        printf("%s\n", b);
        free(b);
        free(a);
        return 0;
}
int fflush ( FILE * stream );

Flush stream
If the given stream was open for writing (or if it was open for updating and the last i/o operation was an output operation) any unwritten data in its output buffer is written to the file.

If stream is a null pointer, all such streams are flushed.

In all other cases, the behavior depends on the specific library implementation. In some implementations, flushing a stream open for reading causes its input buffer to be cleared (but this is not portable expected behavior).

The stream remains open after this call.

When a file is closed, either because of a call to fclose or because the program terminates, all the buffers associated with it are automatically flushed.
In all other cases, the behavior depends on the specific library implementation. In some implementations, flushing a stream open for reading causes its input buffer to be cleared (but this is not portable expected behavior).

http://www.cplusplus.com/reference/cstdio/fflush/?kw=fflush
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-23 08:48:41 | 显示全部楼层
人造人 发表于 2022-5-23 07:35
指针指向的地址不可用
If stream is a null pointer, all such streams are flushed.

是在fflush()裡面輸入NULL嗎?還是直接fflush(),我試了好像都不是
stdin這個東東是指向哪裡啊?
指向程式儲存字元的地方嗎?
看網址中的範例是開啟檔案的狀況,如果沒有開啟檔案,字串儲存的地方是哪裡?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-23 08:49:43 | 显示全部楼层
jackz007 发表于 2022-5-22 22:23
如果始终通过 scanf() 或者不通过 scanf() 函数获取键盘输入,都没有必要使用 fflush(stdin),只 ...
#include <stdio.h>

int main()
{
        char *a;
        scanf("%s", a);
        printf("%s\n", a);
        
        
        char *b;
        scanf("%s", &b);
        printf("%s\n", b);
        return 0;
}
可是我試了這樣是不行的,只能輸入第一次
第二次直接輸出換行(\n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-23 09:10:30 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-23 08:48
是在fflush()裡面輸入NULL嗎?還是直接fflush(),我試了好像都不是
stdin這個東東是指向哪裡啊?
指 ...

没看懂你的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-23 09:29:58 | 显示全部楼层

嗯...,這是我看了你給的網址後的問題
不然還是回歸原本,我要讓一樓中前三個程式正常的運行
讓使用者輸入第一個字串,打印第一個字串
接者讓使用者輸入第二個字串,打印第二個字串
然後程式結束
該怎麼修改該三個程式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-23 09:41:11 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-23 09:29
嗯...,這是我看了你給的網址後的問題
不然還是回歸原本,我要讓一樓中前三個程式正常的運行
讓使用者 ...

一個字串?
这个字符串以什么作为结束?
空格?
'\n' ?
'@'  ?

我猜一个,我猜 '\n'
#include <stdio.h>

int main(void) {
    char str[1024];
    for(size_t i = 0; i < 2; ++i) {
        fgets(str, 1024, stdin);
        printf("%s", str);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-23 09:42:19 | 显示全部楼层
#include <stdio.h>

int main()
{
        //char *a;
        char a[1024];
        scanf("%s", a);
        printf("%s\n", a);
        
        
        char b[1024];
        //scanf("%s", &b);
        scanf("%s", b);
        printf("%s\n", b);
        return 0;
}

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 5 + 3 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-23 09:48:12 | 显示全部楼层

唉?
為什麼用
char a[1024]的方式就可以

char *a
char a[(數字)]
char a[] = "" (試了這樣也可以?
的差別是什麼啊
是什麼東西影響到了
是因為有框框的後面會自動加\0但是char *a後面沒有\0這樣嗎??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-23 09:50:02 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-23 09:48
唉?
為什麼用
char a[1024]的方式就可以

你的变量a没有分配内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-23 09:51:13 | 显示全部楼层    本楼为最佳答案   
一隻太平洋睡鯊 发表于 2022-5-23 09:48
唉?
為什麼用
char a[1024]的方式就可以

不管你用什么方式,只要有足够的内存可用就行
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        char *a = malloc(1024);
        scanf("%s", a);
        printf("%s\n", a);
        //fflush(stdin);
        char *b = malloc(1024);
        scanf("%s", b);
        printf("%s\n", b);
        free(b);
        free(a);
        return 0;
}

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-23 09:57:21 | 显示全部楼层
人造人 发表于 2022-5-23 09:51
不管你用什么方式,只要有足够的内存可用就行

所以字串型態和其他型態不一樣
如果沒有主動分配內存大小給字串變量
程式就容易出現問題,這樣嗎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-23 09:59:06 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-23 09:57
所以字串型態和其他型態不一樣
如果沒有主動分配內存大小給字串變量
程式就容易出現問題,這樣嗎

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 5 + 3 感謝!!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 00:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表