Eat.随 发表于 2023-11-7 19:20:49

输入不得重复

本帖最后由 Eat.随 于 2023-11-7 21:07 编辑

想要编写一个C语言程序,并实现以下功能
1.用户持续输入数字
2.当用户输入的数字与之前输入每一个的数字重复时,停止。

isdkz 发表于 2023-11-7 19:20:57

你可以使用Python来实现这个功能。你可以使用一个集合(set)来存储用户输入的数字,并在每次输入后检查是否重复。下面是一个示例代码:

numbers = set()
while True:
    num = input("请输入一个数字:")
    if num in numbers:
      print("输入重复,程序停止。")
      break
    numbers.add(num)


在这个示例中,我们使用了一个集合(set)来存储用户输入的数字。每次用户输入一个数字后,我们都会检查这个数字是否已经在集合中出现过,如果是的话就停止程序。

Mike_python小 发表于 2023-11-7 19:22:22


#include <stdio.h>

int main() {
    int prev_num = -1;// 用于存储上一个输入的数字,初始值设为-1表示第一个输入不可能重复
    int current_num;

    printf("请输入数字:");
    scanf("%d", &current_num);

    while (current_num != prev_num) {
      prev_num = current_num;// 更新上一个输入的数字为当前输入的数字

      printf("请输入数字:");
      scanf("%d", &current_num);
    }

    printf("输入重复,程序终止。\n");

    return 0;
}


以上是一个简单的C语言程序,实现了用户持续输入数字,当用户输入的数字与之前输入的数字重复时,程序停止。希望能帮到你。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

Eat.随 发表于 2023-11-7 19:24:48

Mike_python小 发表于 2023-11-7 19:22
以上是一个简单的C语言程序,实现了用户持续输入数字,当用户输入的数字与之前输入的数字重复时,程序停 ...

但是当我输入1,2,3,再次输入1,此时程序不会停止

人造人 发表于 2023-11-7 20:32:31

sh-5.2$ cat main.cpp
#include <iostream>
#include <vector>
#include <algorithm>

using std::cin;
using std::vector;
using std::find;

int main() {
    vector<int> v;
    while(true) {
      int n; cin >> n;
      if(find(v.begin(), v.end(), n) != v.end()) break;
      v.push_back(n);
    }
    return 0;
}
sh-5.2$ ./main
1 2 3
1
sh-5.2$

人造人 发表于 2023-11-7 20:33:34

sh-5.2$ cat main.c
#include "list.h"
#include <stdio.h>

size_t find(const list_t *list, int n) {
    for(size_t i = 0; i < list_size(list); ++i) {
      int x; list_get(list, i, &x, sizeof(x));
      if(x == n) return i;
    }
    return -1;
}

int main(void) {
    list_t *list = list_init();
    while(1) {
      int n; scanf("%d", &n);
      if(find(list, n) != -1) break;
      list_append(list, &n, sizeof(n));
    }
    list_deinit(list);
    return 0;
}
sh-5.2$ cat list.h
#ifndef _LIST_H_
#define _LIST_H_

#include <stddef.h>
#include <stdbool.h>

struct list_node_tag {
    void *data; size_t size;
    struct list_node_tag *next;
};

typedef struct {
    struct list_node_tag *head;
    size_t size;
} list_t;

list_t *list_init(void);
void list_deinit(list_t *list);
bool list_clean(list_t *list);
bool list_insert(list_t *list, size_t index, const void *data, size_t size);
bool list_delete(list_t *list, size_t index);
bool list_get(const list_t *list, size_t index, void *data, size_t size);
bool list_set(list_t *list, size_t index, const void *data, size_t size);
bool list_append(list_t *list, const void *data, size_t size);
size_t list_size(const list_t *list);
bool list_empty(const list_t *list);

#endif
sh-5.2$ cat list.c
#include "list.h"
#include <stdlib.h>
#include <string.h>

static struct list_node_tag *new_node(const void *data, size_t size) {
    struct list_node_tag *result = malloc(sizeof(*result));
    if(!result) return NULL;
    result->data = malloc(size);
    if(!result->data) {free(result); return NULL;}
    memcpy(result->data, data, size);
    result->size = size;
    result->next = NULL;
    return result;
}

static void free_node(struct list_node_tag *n) {
    free(n->data);
    free(n);
}

static struct list_node_tag *const *locate_node_const(const list_t *list, size_t index) {
    struct list_node_tag *const *result = &list->head;
    while(index--) result = &(*result)->next;
    return result;
}

static struct list_node_tag **locate_node(list_t *list, size_t index) {
    return (struct list_node_tag **)locate_node_const(list, index);
}

list_t *list_init(void) {
    list_t *list = malloc(sizeof(*list));
    if(!list) return NULL;
    list->head = NULL;
    list->size = 0;
    return list;
}

void list_deinit(list_t *list) {
    if(!list) return;
    list_clean(list);
    free(list);
}

bool list_clean(list_t *list) {
    if(!list) return false;
    while(!list_empty(list)) if(!list_delete(list, 0)) return false;
    return true;
}

bool list_insert(list_t *list, size_t index, const void *data, size_t size) {
    if(!list) return false;
    if(list_size(list) < index) return false;
    if(!data) return false;
    struct list_node_tag **current = locate_node(list, index);
    struct list_node_tag *node = new_node(data, size);
    if(!node) return false;
    node->next = *current;
    *current = node;
    ++list->size;
    return true;
}

bool list_delete(list_t *list, size_t index) {
    if(!list) return false;
    if(list_size(list) <= index) return false;
    struct list_node_tag **current = locate_node(list, index);
    struct list_node_tag *temp = *current;
    *current = temp->next;
    free_node(temp);
    --list->size;
    return true;
}

bool list_get(const list_t *list, size_t index, void *data, size_t size) {
    if(!list) return false;
    if(list_size(list) <= index) return false;
    if(!data) return false;
    struct list_node_tag *current = *locate_node_const(list, index);
    if(current->size > size) return false;
    memcpy(data, current->data, current->size);
    return true;
}

bool list_set(list_t *list, size_t index, const void *data, size_t size) {
    bool res = list_delete(list, index);
    return res ? list_insert(list, index, data, size) : res;
}

bool list_append(list_t *list, const void *data, size_t size) {
    if(!list) return false;
    return list_insert(list, list_size(list), data, size);
}

size_t list_size(const list_t *list) {
    if(!list) return 0;
    return list->size;
}

bool list_empty(const list_t *list) {
    if(!list) return true;
    return list_size(list) == 0;
}
sh-5.2$ ./main
1 2 3
1
sh-5.2$

jackz007 发表于 2023-11-7 20:53:51

本帖最后由 jackz007 于 2023-11-7 20:58 编辑

#include <stdio.h>
#include <conio.h>

int main(void)
{
      char c , s                  ;
      intk , n , m                      ;
      for(k = m = 0 ; k < 2048 ;) {
                c = getch()               ;
                n = 0                     ;
                while(n < m) {
                        if(s == c) break ;
                        n ++                ;
                }
                if(n == m) {
                        s = c         ;
                        putch(c)            ;
                } else {
                        break               ;
                }
      }
      putch('\r')                         ;
}
页: [1]
查看完整版本: 输入不得重复