#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void clearBuffer(FILE *fp) {
// limpa os caracteres do buffer (aqueles que não foram lidos no fgets, por exemplo, porque passou o tamanho máximo)
int c;
while ((c
= fgetc(fp
)) != EOF
&& c
!= '\n'); }
char *fgets_wrapper(char *buffer, size_t buflen, FILE *fp) {
if (fgets(buffer
, buflen
, fp
) != 0) { // se leu corretamente if (len > 0 && buffer[len - 1] == '\n') {
// tem quebra de linha, podemos removê-la do final
buffer[len - 1] = '\0';
} else {
// não tem quebra de linha, então foram digitados mais caracteres que o tamanho máximo
// por isso precisa limpar o buffer e retirá-los de lá, senão eles serão lidos na próxima chamada
clearBuffer(fp);
}
return buffer;
}
return 0;
}
int main() {
char buffer[10];
int tam;
// leia com fgets, e depois converta o que foi lido para número
if (fgets_wrapper(buffer, 10, stdin) == 0) {
printf("Erro ao ler o tamanho\n"); }
// sscanf retorna a quantidade de itens lidos (no caso, se não for 1 é porque deu errado)
if (sscanf(buffer
, "%d", &tam
) != 1) { printf("Não foi digitado um número\n"); }
// use o tamanho que foi lido para criar o array com o tamanho correto
char nome[tam][10];
for (int i = 0; i < tam; i++) {
if (fgets_wrapper(nome[i], 10, stdin) == 0) {
printf("Erro ao ler o nome\n"); }
}
for (int i = 0; i < tam; i++) {
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdm9pZCBjbGVhckJ1ZmZlcihGSUxFICpmcCkgewogICAgLy8gbGltcGEgb3MgY2FyYWN0ZXJlcyBkbyBidWZmZXIgKGFxdWVsZXMgcXVlIG7Do28gZm9yYW0gbGlkb3Mgbm8gZmdldHMsIHBvciBleGVtcGxvLCBwb3JxdWUgcGFzc291IG8gdGFtYW5obyBtw6F4aW1vKQogICAgaW50IGM7CiAgICB3aGlsZSAoKGMgPSBmZ2V0YyhmcCkpICE9IEVPRiAmJiBjICE9ICdcbicpOwp9CgpjaGFyICpmZ2V0c193cmFwcGVyKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwgRklMRSAqZnApIHsKICAgIGlmIChmZ2V0cyhidWZmZXIsIGJ1ZmxlbiwgZnApICE9IDApIHsgLy8gc2UgbGV1IGNvcnJldGFtZW50ZQogICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oYnVmZmVyKTsKICAgICAgICBpZiAobGVuID4gMCAmJiBidWZmZXJbbGVuIC0gMV0gPT0gJ1xuJykgewogICAgICAgICAgICAvLyB0ZW0gcXVlYnJhIGRlIGxpbmhhLCBwb2RlbW9zIHJlbW92w6otbGEgZG8gZmluYWwKICAgICAgICAgICAgYnVmZmVyW2xlbiAtIDFdID0gJ1wwJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBuw6NvIHRlbSBxdWVicmEgZGUgbGluaGEsIGVudMOjbyBmb3JhbSBkaWdpdGFkb3MgbWFpcyBjYXJhY3RlcmVzIHF1ZSBvIHRhbWFuaG8gbcOheGltbwogICAgICAgICAgICAvLyBwb3IgaXNzbyBwcmVjaXNhIGxpbXBhciBvIGJ1ZmZlciBlIHJldGlyw6EtbG9zIGRlIGzDoSwgc2Vuw6NvIGVsZXMgc2Vyw6NvIGxpZG9zIG5hIHByw7N4aW1hIGNoYW1hZGEKICAgICAgICAgICAgY2xlYXJCdWZmZXIoZnApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYnVmZmVyOwogICAgfQoKICAgIHJldHVybiAwOwp9CgppbnQgbWFpbigpIHsKICAgIGNoYXIgYnVmZmVyWzEwXTsKICAgIGludCB0YW07CiAgICBwcmludGYoIlRhbWFuaG86ICIpOwogICAgLy8gbGVpYSBjb20gZmdldHMsIGUgZGVwb2lzIGNvbnZlcnRhIG8gcXVlIGZvaSBsaWRvIHBhcmEgbsO6bWVybwogICAgaWYgKGZnZXRzX3dyYXBwZXIoYnVmZmVyLCAxMCwgc3RkaW4pID09IDApIHsKICAgICAgICBwcmludGYoIkVycm8gYW8gbGVyIG8gdGFtYW5ob1xuIik7CiAgICAgICAgZXhpdCgtMSk7CiAgICB9CiAgICAvLyBzc2NhbmYgcmV0b3JuYSBhIHF1YW50aWRhZGUgZGUgaXRlbnMgbGlkb3MgKG5vIGNhc28sIHNlIG7Do28gZm9yIDEgw6kgcG9ycXVlIGRldSBlcnJhZG8pCiAgICBpZiAoc3NjYW5mKGJ1ZmZlciwgIiVkIiwgJnRhbSkgIT0gMSkgewogICAgICAgIHByaW50ZigiTsOjbyBmb2kgZGlnaXRhZG8gdW0gbsO6bWVyb1xuIik7CiAgICAgICAgZXhpdCgtMSk7CiAgICB9CgogICAgLy8gdXNlIG8gdGFtYW5obyBxdWUgZm9pIGxpZG8gcGFyYSBjcmlhciBvIGFycmF5IGNvbSBvIHRhbWFuaG8gY29ycmV0bwogICAgY2hhciBub21lW3RhbV1bMTBdOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFtOyBpKyspIHsKICAgICAgICBwcmludGYoIkVudHJhZGE6ICIpOwogICAgICAgIGlmIChmZ2V0c193cmFwcGVyKG5vbWVbaV0sIDEwLCBzdGRpbikgPT0gMCkgewogICAgICAgICAgICBwcmludGYoIkVycm8gYW8gbGVyIG8gbm9tZVxuIik7CiAgICAgICAgICAgIGV4aXQoLTEpOwogICAgICAgIH0KICAgIH0KCiAgICBwcmludGYoIlxuTm9tZXM6XG4iKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFtOyBpKyspIHsKICAgICAgICBwcmludGYoIiVzXG4iLCBub21lW2ldKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=