一隻太平洋睡鯊 发表于 2022-5-22 21:38:32

怎麼連續讓使用者輸入字串

比如
#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;
}

jackz007 发表于 2022-5-22 22:23:50

本帖最后由 jackz007 于 2022-5-22 22:29 编辑

         如果始终通过 scanf() 或者不通过 scanf() 函数获取键盘输入,都没有必要使用 fflush(stdin),只有在调用过 scanf() 后,需要换用 getchar()、gets() 等函数获得键盘输入时,才是有必要的。

人造人 发表于 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

一隻太平洋睡鯊 发表于 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這個東東是指向哪裡啊?
指向程式儲存字元的地方嗎?
看網址中的範例是開啟檔案的狀況,如果沒有開啟檔案,字串儲存的地方是哪裡?

一隻太平洋睡鯊 发表于 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)

人造人 发表于 2022-5-23 09:10:30

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

没看懂你的问题

一隻太平洋睡鯊 发表于 2022-5-23 09:29:58

人造人 发表于 2022-5-23 09:10
没看懂你的问题

嗯...,這是我看了你給的網址後的問題
不然還是回歸原本,我要讓一樓中前三個程式正常的運行
讓使用者輸入第一個字串,打印第一個字串
接者讓使用者輸入第二個字串,打印第二個字串
然後程式結束
該怎麼修改該三個程式?

人造人 发表于 2022-5-23 09:41:11

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

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

我猜一个,我猜 '\n'

#include <stdio.h>

int main(void) {
    char str;
    for(size_t i = 0; i < 2; ++i) {
      fgets(str, 1024, stdin);
      printf("%s", str);
    }
    return 0;
}

人造人 发表于 2022-5-23 09:42:19

#include <stdio.h>

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

一隻太平洋睡鯊 发表于 2022-5-23 09:48:12

人造人 发表于 2022-5-23 09:42


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

char *a
char a[(數字)]
char a[] = "" (試了這樣也可以?
的差別是什麼啊
是什麼東西影響到了
是因為有框框的後面會自動加\0但是char *a後面沒有\0這樣嗎??

人造人 发表于 2022-5-23 09:50:02

一隻太平洋睡鯊 发表于 2022-5-23 09:48
唉?
為什麼用
char a的方式就可以


你的变量a没有分配内存

人造人 发表于 2022-5-23 09:51:13

一隻太平洋睡鯊 发表于 2022-5-23 09:48
唉?
為什麼用
char a的方式就可以


不管你用什么方式,只要有足够的内存可用就行
#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;
}

一隻太平洋睡鯊 发表于 2022-5-23 09:57:21

人造人 发表于 2022-5-23 09:51
不管你用什么方式,只要有足够的内存可用就行

所以字串型態和其他型態不一樣
如果沒有主動分配內存大小給字串變量
程式就容易出現問題,這樣嗎

人造人 发表于 2022-5-23 09:59:06

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

页: [1]
查看完整版本: 怎麼連續讓使用者輸入字串