Extra Input pins needed on Arduino

I have an Arduino Uno. But I want a lot more input pins because I have exhausted the on-board pins. What shift register should I use?

Also, I have a lame question. Can a serial shift-out register be used only for increasing the number of outputs? Do they work equally well for inputs like the onboard I/O pins?

What is it for ?

An Arduino Mega 2560 has more pins. Some I2C I/O expanders have pins that can be either output or input. There are multiplexers that connect signals in both directions, either to input or output. A normal shift register for input is the 74HC165. The example of ShiftIn uses a CD4021, which is also a good choice. A normal shift register for output is the 74HC595, often used with the shiftOut() function. Instead of the 74HC595 there are also shift registers that can drive leds. For leds, it is possible to use Charlieplexing. Some use a single analog pin to read multiple buttons, but I don't like that solution. Do you have a LCD display connected to the Arduino ? If you replace that with a I2C display, then you free up a number of pins.

This goes on and on and on. Therefor my question: what is it for and what is connected to the other pins.

Among the other things , I have a NRF24L01 transceiver, IR transmitter, IR receiver, 4*4 keypad, 16*2 lcd.

You can probably use a pcf8574 chip to scan the 4x4 keypad. This will use only 2 Arduino pins (must be A4 & A5 on Uno). Get an i2c adaptor for your 16x2 lcd display. It can also use the same two pins.

The nrf module must use the SPI pins (11, 12, 13 on Uno) plus any two other digital pins.

Your IR receiver and transmitter will need one digital pin each.

You still have plenty of pins to play with.

Can a serial shift-out register be used only for increasing the number of outputs?

Yes.

keep in mind, you can get a MEGA board for like $10-15 dollars on amazon or the like. I used to buy unos, now I only buy mega. about same price, much more pins, about the same form factor (a touch bigger, not much). runs same code, etc

Another option you can do is use the analog input with a set of buttons at different resistance, the only downfall is that it can't tell if you push two buttons on that same analog in.

You just set the buttons at different values